welo git mirrors
docs/manual/git.html ac6f0199f51fc6c01f765bf6969edf8b7dee0a37 (ac6f0199) Text, 125.56 KB
Tff7b72<!doctype html>
Tb4b4b4<Tff7b72html Te6edf3classTff7b72=Ta5d6ff"no-js" Te6edf3langTff7b72=Ta5d6ff"en" Te6edf3data-content_rootTff7b72=Ta5d6ff"./"Tb4b4b4>
Tb4b4b4<Tff7b72headTb4b4b4>Tb4b4b4<Tff7b72meta Te6edf3charsetTff7b72=Ta5d6ff"utf-8"Tb4b4b4>
Tb4b4b4<Tff7b72meta Te6edf3nameTff7b72=Ta5d6ff"viewport" Te6edf3contentTff7b72=Ta5d6ff"width=device-width,initial-scale=1"Tb4b4b4>
Tb4b4b4<Tff7b72meta Te6edf3nameTff7b72=Ta5d6ff"color-scheme" Te6edf3contentTff7b72=Ta5d6ff"light dark"Tb4b4b4>Tb4b4b4<Tff7b72meta Te6edf3nameTff7b72=Ta5d6ff"viewport" Te6edf3contentTff7b72=Ta5d6ff"width=device-width, initial-scale=1" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72link Te6edf3relTff7b72=Ta5d6ff"index" Te6edf3titleTff7b72=Ta5d6ff"Index" Te6edf3hrefTff7b72=Ta5d6ff"genindex.html"Tb4b4b4>Tb4b4b4<Tff7b72link Te6edf3relTff7b72=Ta5d6ff"search" Te6edf3titleTff7b72=Ta5d6ff"Search" Te6edf3hrefTff7b72=Ta5d6ff"search.html"Tb4b4b4>Tb4b4b4<Tff7b72link Te6edf3relTff7b72=Ta5d6ff"next" Te6edf3titleTff7b72=Ta5d6ff"Support Reticulum" Te6edf3hrefTff7b72=Ta5d6ff"support.html"Tb4b4b4>Tb4b4b4<Tff7b72link Te6edf3relTff7b72=Ta5d6ff"prev" Te6edf3titleTff7b72=Ta5d6ff"Distributed Development" Te6edf3hrefTff7b72=Ta5d6ff"distributed.html"Tb4b4b4>
Tb4b4b4<Tff7b72link Te6edf3relTff7b72=Ta5d6ff"prefetch" Te6edf3hrefTff7b72=Ta5d6ff"_static/rns_logo_512.png" Te6edf3asTff7b72=Ta5d6ff"image"Tb4b4b4>
T8b949e<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
Tb4b4b4<Tff7b72titleTb4b4b4>Git Over Reticulum - Reticulum Network Stack 1.3.6 documentationTb4b4b4<Tb4b4b4/Tff7b72titleTb4b4b4>
Tb4b4b4<Tff7b72link Te6edf3relTff7b72=Ta5d6ff"stylesheet" Te6edf3typeTff7b72=Ta5d6ff"text/css" Te6edf3hrefTff7b72=Ta5d6ff"_static/pygments.css?v=d111a655" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72link Te6edf3relTff7b72=Ta5d6ff"stylesheet" Te6edf3typeTff7b72=Ta5d6ff"text/css" Te6edf3hrefTff7b72=Ta5d6ff"_static/styles/furo.css?v=580074bf" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72link Te6edf3relTff7b72=Ta5d6ff"stylesheet" Te6edf3typeTff7b72=Ta5d6ff"text/css" Te6edf3hrefTff7b72=Ta5d6ff"_static/copybutton.css?v=76b2166b" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72link Te6edf3relTff7b72=Ta5d6ff"stylesheet" Te6edf3typeTff7b72=Ta5d6ff"text/css" Te6edf3hrefTff7b72=Ta5d6ff"_static/styles/furo-extensions.css?v=8dab3a3b" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72link Te6edf3relTff7b72=Ta5d6ff"stylesheet" Te6edf3typeTff7b72=Ta5d6ff"text/css" Te6edf3hrefTff7b72=Ta5d6ff"_static/custom.css?v=e1715074" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72styleTb4b4b4>
Tff7b72body Tb4b4b4{
Te6edf3--color-code-backgroundTb4b4b4: T79c0ff#f2f2f2Tb4b4b4;
Te6edf3--color-code-foregroundTb4b4b4: T79c0ff#1e1e1eTb4b4b4;
Tb4b4b4}
Tb4b4b4@Tff7b72media Tff7b72not Tff7b72print Tb4b4b4{
Tff7b72bodyTff7b72[Tff7b72data-themeTff7b72=Ta5d6ff"dark"Tff7b72] Tb4b4b4{
Te6edf3--color-code-backgroundTb4b4b4: T79c0ff#202020Tb4b4b4;
Te6edf3--color-code-foregroundTb4b4b4: T79c0ff#d0d0d0Tb4b4b4;
Te6edf3--color-background-primaryTb4b4b4: T79c0ff#202b38Tb4b4b4;
Te6edf3--color-background-secondaryTb4b4b4: T79c0ff#161f27Tb4b4b4;
Te6edf3--color-foreground-primaryTb4b4b4: T79c0ff#dbdbdbTb4b4b4;
Te6edf3--color-foreground-secondaryTb4b4b4: T79c0ff#a9b1baTb4b4b4;
Te6edf3--color-brand-primaryTb4b4b4: T79c0ff#41adffTb4b4b4;
Te6edf3--color-background-hoverTb4b4b4: T79c0ff#161f27Tb4b4b4;
Te6edf3--color-api-nameTb4b4b4: T79c0ff#ffbe85Tb4b4b4;
Te6edf3--color-api-pre-nameTb4b4b4: T79c0ff#efae75Tb4b4b4;
Tb4b4b4}
Tb4b4b4@Tff7b72media Tff7b72(Tff7b72prefers-color-schemeTff7b72: Tff7b72darkTff7b72) Tb4b4b4{
Tff7b72bodyTb4b4b4:Tf0883enotTff7b72(Tff7b72[Tff7b72data-themeTff7b72=Ta5d6ff"light"Tff7b72]Tff7b72) Tb4b4b4{
Te6edf3--color-code-backgroundTb4b4b4: T79c0ff#202020Tb4b4b4;
Te6edf3--color-code-foregroundTb4b4b4: T79c0ff#d0d0d0Tb4b4b4;
Te6edf3--color-background-primaryTb4b4b4: T79c0ff#202b38Tb4b4b4;
Te6edf3--color-background-secondaryTb4b4b4: T79c0ff#161f27Tb4b4b4;
Te6edf3--color-foreground-primaryTb4b4b4: T79c0ff#dbdbdbTb4b4b4;
Te6edf3--color-foreground-secondaryTb4b4b4: T79c0ff#a9b1baTb4b4b4;
Te6edf3--color-brand-primaryTb4b4b4: T79c0ff#41adffTb4b4b4;
Te6edf3--color-background-hoverTb4b4b4: T79c0ff#161f27Tb4b4b4;
Te6edf3--color-api-nameTb4b4b4: T79c0ff#ffbe85Tb4b4b4;
Te6edf3--color-api-pre-nameTb4b4b4: T79c0ff#efae75Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4<Tb4b4b4/Tff7b72styleTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72headTb4b4b4>
Tb4b4b4<Tff7b72bodyTb4b4b4>
Tb4b4b4<Tff7b72scriptTb4b4b4>
Tffa657documentTb4b4b4.Te6edf3bodyTb4b4b4.Te6edf3datasetTb4b4b4.Te6edf3theme Tff7b72= Te6edf3localStorageTb4b4b4.Te6edf3getItemTb4b4b4(Ta5d6ff"theme"Tb4b4b4) Tff7b72|| Ta5d6ff"auto"Tb4b4b4;
Tb4b4b4<Tb4b4b4/Tff7b72scriptTb4b4b4>
Tb4b4b4<Tff7b72svg Te6edf3xmlnsTff7b72=Ta5d6ff"http://www.w3.org/2000/svg" Te6edf3styleTff7b72=Ta5d6ff"display: none;"Tb4b4b4>
Tb4b4b4<Tff7b72symbol Te6edf3idTff7b72=Ta5d6ff"svg-toc" Te6edf3viewBoxTff7b72=Ta5d6ff"0 0 24 24"Tb4b4b4>
Tb4b4b4<Tff7b72titleTb4b4b4>ContentsTb4b4b4<Tb4b4b4/Tff7b72titleTb4b4b4>
Tb4b4b4<Tff7b72svg Te6edf3strokeTff7b72=Ta5d6ff"currentColor" Te6edf3fillTff7b72=Ta5d6ff"currentColor" Te6edf3stroke-widthTff7b72=Ta5d6ff"0" Te6edf3viewBoxTff7b72=Ta5d6ff"0 0 1024 1024"Tb4b4b4>
Tb4b4b4<Tff7b72path Te6edf3dTff7b72=Ta5d6ff"M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72svgTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72symbolTb4b4b4>
Tb4b4b4<Tff7b72symbol Te6edf3idTff7b72=Ta5d6ff"svg-menu" Te6edf3viewBoxTff7b72=Ta5d6ff"0 0 24 24"Tb4b4b4>
Tb4b4b4<Tff7b72titleTb4b4b4>MenuTb4b4b4<Tb4b4b4/Tff7b72titleTb4b4b4>
Tb4b4b4<Tff7b72svg Te6edf3xmlnsTff7b72=Ta5d6ff"http://www.w3.org/2000/svg" Te6edf3viewBoxTff7b72=Ta5d6ff"0 0 24 24" Te6edf3fillTff7b72=Ta5d6ff"none" Te6edf3strokeTff7b72=Ta5d6ff"currentColor"
Te6edf3stroke-widthTff7b72=Ta5d6ff"2" Te6edf3stroke-linecapTff7b72=Ta5d6ff"round" Te6edf3stroke-linejoinTff7b72=Ta5d6ff"round" Te6edf3classTff7b72=Ta5d6ff"feather-menu"Tb4b4b4>
Tb4b4b4<Tff7b72line Te6edf3x1Tff7b72=Ta5d6ff"3" Te6edf3y1Tff7b72=Ta5d6ff"12" Te6edf3x2Tff7b72=Ta5d6ff"21" Te6edf3y2Tff7b72=Ta5d6ff"12"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72lineTb4b4b4>
Tb4b4b4<Tff7b72line Te6edf3x1Tff7b72=Ta5d6ff"3" Te6edf3y1Tff7b72=Ta5d6ff"6" Te6edf3x2Tff7b72=Ta5d6ff"21" Te6edf3y2Tff7b72=Ta5d6ff"6"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72lineTb4b4b4>
Tb4b4b4<Tff7b72line Te6edf3x1Tff7b72=Ta5d6ff"3" Te6edf3y1Tff7b72=Ta5d6ff"18" Te6edf3x2Tff7b72=Ta5d6ff"21" Te6edf3y2Tff7b72=Ta5d6ff"18"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72lineTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72svgTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72symbolTb4b4b4>
Tb4b4b4<Tff7b72symbol Te6edf3idTff7b72=Ta5d6ff"svg-arrow-right" Te6edf3viewBoxTff7b72=Ta5d6ff"0 0 24 24"Tb4b4b4>
Tb4b4b4<Tff7b72titleTb4b4b4>ExpandTb4b4b4<Tb4b4b4/Tff7b72titleTb4b4b4>
Tb4b4b4<Tff7b72svg Te6edf3xmlnsTff7b72=Ta5d6ff"http://www.w3.org/2000/svg" Te6edf3viewBoxTff7b72=Ta5d6ff"0 0 24 24" Te6edf3fillTff7b72=Ta5d6ff"none" Te6edf3strokeTff7b72=Ta5d6ff"currentColor"
Te6edf3stroke-widthTff7b72=Ta5d6ff"2" Te6edf3stroke-linecapTff7b72=Ta5d6ff"round" Te6edf3stroke-linejoinTff7b72=Ta5d6ff"round" Te6edf3classTff7b72=Ta5d6ff"feather-chevron-right"Tb4b4b4>
Tb4b4b4<Tff7b72polyline Te6edf3pointsTff7b72=Ta5d6ff"9 18 15 12 9 6"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72polylineTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72svgTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72symbolTb4b4b4>
Tb4b4b4<Tff7b72symbol Te6edf3idTff7b72=Ta5d6ff"svg-sun" Te6edf3viewBoxTff7b72=Ta5d6ff"0 0 24 24"Tb4b4b4>
Tb4b4b4<Tff7b72titleTb4b4b4>Light modeTb4b4b4<Tb4b4b4/Tff7b72titleTb4b4b4>
Tb4b4b4<Tff7b72svg Te6edf3xmlnsTff7b72=Ta5d6ff"http://www.w3.org/2000/svg" Te6edf3viewBoxTff7b72=Ta5d6ff"0 0 24 24" Te6edf3fillTff7b72=Ta5d6ff"none" Te6edf3strokeTff7b72=Ta5d6ff"currentColor"
Te6edf3stroke-widthTff7b72=Ta5d6ff"1" Te6edf3stroke-linecapTff7b72=Ta5d6ff"round" Te6edf3stroke-linejoinTff7b72=Ta5d6ff"round" Te6edf3classTff7b72=Ta5d6ff"feather-sun"Tb4b4b4>
Tb4b4b4<Tff7b72circle Te6edf3cxTff7b72=Ta5d6ff"12" Te6edf3cyTff7b72=Ta5d6ff"12" Te6edf3rTff7b72=Ta5d6ff"5"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72circleTb4b4b4>
Tb4b4b4<Tff7b72line Te6edf3x1Tff7b72=Ta5d6ff"12" Te6edf3y1Tff7b72=Ta5d6ff"1" Te6edf3x2Tff7b72=Ta5d6ff"12" Te6edf3y2Tff7b72=Ta5d6ff"3"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72lineTb4b4b4>
Tb4b4b4<Tff7b72line Te6edf3x1Tff7b72=Ta5d6ff"12" Te6edf3y1Tff7b72=Ta5d6ff"21" Te6edf3x2Tff7b72=Ta5d6ff"12" Te6edf3y2Tff7b72=Ta5d6ff"23"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72lineTb4b4b4>
Tb4b4b4<Tff7b72line Te6edf3x1Tff7b72=Ta5d6ff"4.22" Te6edf3y1Tff7b72=Ta5d6ff"4.22" Te6edf3x2Tff7b72=Ta5d6ff"5.64" Te6edf3y2Tff7b72=Ta5d6ff"5.64"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72lineTb4b4b4>
Tb4b4b4<Tff7b72line Te6edf3x1Tff7b72=Ta5d6ff"18.36" Te6edf3y1Tff7b72=Ta5d6ff"18.36" Te6edf3x2Tff7b72=Ta5d6ff"19.78" Te6edf3y2Tff7b72=Ta5d6ff"19.78"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72lineTb4b4b4>
Tb4b4b4<Tff7b72line Te6edf3x1Tff7b72=Ta5d6ff"1" Te6edf3y1Tff7b72=Ta5d6ff"12" Te6edf3x2Tff7b72=Ta5d6ff"3" Te6edf3y2Tff7b72=Ta5d6ff"12"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72lineTb4b4b4>
Tb4b4b4<Tff7b72line Te6edf3x1Tff7b72=Ta5d6ff"21" Te6edf3y1Tff7b72=Ta5d6ff"12" Te6edf3x2Tff7b72=Ta5d6ff"23" Te6edf3y2Tff7b72=Ta5d6ff"12"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72lineTb4b4b4>
Tb4b4b4<Tff7b72line Te6edf3x1Tff7b72=Ta5d6ff"4.22" Te6edf3y1Tff7b72=Ta5d6ff"19.78" Te6edf3x2Tff7b72=Ta5d6ff"5.64" Te6edf3y2Tff7b72=Ta5d6ff"18.36"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72lineTb4b4b4>
Tb4b4b4<Tff7b72line Te6edf3x1Tff7b72=Ta5d6ff"18.36" Te6edf3y1Tff7b72=Ta5d6ff"5.64" Te6edf3x2Tff7b72=Ta5d6ff"19.78" Te6edf3y2Tff7b72=Ta5d6ff"4.22"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72lineTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72svgTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72symbolTb4b4b4>
Tb4b4b4<Tff7b72symbol Te6edf3idTff7b72=Ta5d6ff"svg-moon" Te6edf3viewBoxTff7b72=Ta5d6ff"0 0 24 24"Tb4b4b4>
Tb4b4b4<Tff7b72titleTb4b4b4>Dark modeTb4b4b4<Tb4b4b4/Tff7b72titleTb4b4b4>
Tb4b4b4<Tff7b72svg Te6edf3xmlnsTff7b72=Ta5d6ff"http://www.w3.org/2000/svg" Te6edf3viewBoxTff7b72=Ta5d6ff"0 0 24 24" Te6edf3fillTff7b72=Ta5d6ff"none" Te6edf3strokeTff7b72=Ta5d6ff"currentColor"
Te6edf3stroke-widthTff7b72=Ta5d6ff"1" Te6edf3stroke-linecapTff7b72=Ta5d6ff"round" Te6edf3stroke-linejoinTff7b72=Ta5d6ff"round" Te6edf3classTff7b72=Ta5d6ff"icon-tabler-moon"Tb4b4b4>
Tb4b4b4<Tff7b72path Te6edf3strokeTff7b72=Ta5d6ff"none" Te6edf3dTff7b72=Ta5d6ff"M0 0h24v24H0z" Te6edf3fillTff7b72=Ta5d6ff"none" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72path Te6edf3dTff7b72=Ta5d6ff"M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72svgTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72symbolTb4b4b4>
Tb4b4b4<Tff7b72symbol Te6edf3idTff7b72=Ta5d6ff"svg-sun-with-moon" Te6edf3viewBoxTff7b72=Ta5d6ff"0 0 24 24"Tb4b4b4>
Tb4b4b4<Tff7b72titleTb4b4b4>Auto light/dark, in light modeTb4b4b4<Tb4b4b4/Tff7b72titleTb4b4b4>
Tb4b4b4<Tff7b72svg Te6edf3xmlnsTff7b72=Ta5d6ff"http://www.w3.org/2000/svg" Te6edf3viewBoxTff7b72=Ta5d6ff"0 0 24 24" Te6edf3fillTff7b72=Ta5d6ff"none" Te6edf3strokeTff7b72=Ta5d6ff"currentColor"
Te6edf3stroke-widthTff7b72=Ta5d6ff"1" Te6edf3stroke-linecapTff7b72=Ta5d6ff"round" Te6edf3stroke-linejoinTff7b72=Ta5d6ff"round"
Te6edf3classTff7b72=Ta5d6ff"icon-custom-derived-from-feather-sun-and-tabler-moon"Tb4b4b4>
Tb4b4b4<Tff7b72path Te6edf3styleTff7b72=Ta5d6ff"opacity: 50%" Te6edf3dTff7b72=Ta5d6ff"M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72line Te6edf3x1Tff7b72=Ta5d6ff"14.5" Te6edf3y1Tff7b72=Ta5d6ff"3.25" Te6edf3x2Tff7b72=Ta5d6ff"14.5" Te6edf3y2Tff7b72=Ta5d6ff"1.25"Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72line Te6edf3x1Tff7b72=Ta5d6ff"14.5" Te6edf3y1Tff7b72=Ta5d6ff"15.85" Te6edf3x2Tff7b72=Ta5d6ff"14.5" Te6edf3y2Tff7b72=Ta5d6ff"17.85"Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72line Te6edf3x1Tff7b72=Ta5d6ff"10.044" Te6edf3y1Tff7b72=Ta5d6ff"5.094" Te6edf3x2Tff7b72=Ta5d6ff"8.63" Te6edf3y2Tff7b72=Ta5d6ff"3.68"Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72line Te6edf3x1Tff7b72=Ta5d6ff"19" Te6edf3y1Tff7b72=Ta5d6ff"14.05" Te6edf3x2Tff7b72=Ta5d6ff"20.414" Te6edf3y2Tff7b72=Ta5d6ff"15.464"Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72line Te6edf3x1Tff7b72=Ta5d6ff"8.2" Te6edf3y1Tff7b72=Ta5d6ff"9.55" Te6edf3x2Tff7b72=Ta5d6ff"6.2" Te6edf3y2Tff7b72=Ta5d6ff"9.55"Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72line Te6edf3x1Tff7b72=Ta5d6ff"20.8" Te6edf3y1Tff7b72=Ta5d6ff"9.55" Te6edf3x2Tff7b72=Ta5d6ff"22.8" Te6edf3y2Tff7b72=Ta5d6ff"9.55"Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72line Te6edf3x1Tff7b72=Ta5d6ff"10.044" Te6edf3y1Tff7b72=Ta5d6ff"14.006" Te6edf3x2Tff7b72=Ta5d6ff"8.63" Te6edf3y2Tff7b72=Ta5d6ff"15.42"Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72line Te6edf3x1Tff7b72=Ta5d6ff"19" Te6edf3y1Tff7b72=Ta5d6ff"5.05" Te6edf3x2Tff7b72=Ta5d6ff"20.414" Te6edf3y2Tff7b72=Ta5d6ff"3.636"Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72circle Te6edf3cxTff7b72=Ta5d6ff"14.5" Te6edf3cyTff7b72=Ta5d6ff"9.55" Te6edf3rTff7b72=Ta5d6ff"3.6"Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72svgTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72symbolTb4b4b4>
Tb4b4b4<Tff7b72symbol Te6edf3idTff7b72=Ta5d6ff"svg-moon-with-sun" Te6edf3viewBoxTff7b72=Ta5d6ff"0 0 24 24"Tb4b4b4>
Tb4b4b4<Tff7b72titleTb4b4b4>Auto light/dark, in dark modeTb4b4b4<Tb4b4b4/Tff7b72titleTb4b4b4>
Tb4b4b4<Tff7b72svg Te6edf3xmlnsTff7b72=Ta5d6ff"http://www.w3.org/2000/svg" Te6edf3viewBoxTff7b72=Ta5d6ff"0 0 24 24" Te6edf3fillTff7b72=Ta5d6ff"none" Te6edf3strokeTff7b72=Ta5d6ff"currentColor"
Te6edf3stroke-widthTff7b72=Ta5d6ff"1" Te6edf3stroke-linecapTff7b72=Ta5d6ff"round" Te6edf3stroke-linejoinTff7b72=Ta5d6ff"round"
Te6edf3classTff7b72=Ta5d6ff"icon-custom-derived-from-feather-sun-and-tabler-moon"Tb4b4b4>
Tb4b4b4<Tff7b72path Te6edf3dTff7b72=Ta5d6ff"M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72line Te6edf3styleTff7b72=Ta5d6ff"opacity: 50%" Te6edf3x1Tff7b72=Ta5d6ff"18" Te6edf3y1Tff7b72=Ta5d6ff"3.705" Te6edf3x2Tff7b72=Ta5d6ff"18" Te6edf3y2Tff7b72=Ta5d6ff"2.5"Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72line Te6edf3styleTff7b72=Ta5d6ff"opacity: 50%" Te6edf3x1Tff7b72=Ta5d6ff"18" Te6edf3y1Tff7b72=Ta5d6ff"11.295" Te6edf3x2Tff7b72=Ta5d6ff"18" Te6edf3y2Tff7b72=Ta5d6ff"12.5"Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72line Te6edf3styleTff7b72=Ta5d6ff"opacity: 50%" Te6edf3x1Tff7b72=Ta5d6ff"15.316" Te6edf3y1Tff7b72=Ta5d6ff"4.816" Te6edf3x2Tff7b72=Ta5d6ff"14.464" Te6edf3y2Tff7b72=Ta5d6ff"3.964"Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72line Te6edf3styleTff7b72=Ta5d6ff"opacity: 50%" Te6edf3x1Tff7b72=Ta5d6ff"20.711" Te6edf3y1Tff7b72=Ta5d6ff"10.212" Te6edf3x2Tff7b72=Ta5d6ff"21.563" Te6edf3y2Tff7b72=Ta5d6ff"11.063"Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72line Te6edf3styleTff7b72=Ta5d6ff"opacity: 50%" Te6edf3x1Tff7b72=Ta5d6ff"14.205" Te6edf3y1Tff7b72=Ta5d6ff"7.5" Te6edf3x2Tff7b72=Ta5d6ff"13.001" Te6edf3y2Tff7b72=Ta5d6ff"7.5"Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72line Te6edf3styleTff7b72=Ta5d6ff"opacity: 50%" Te6edf3x1Tff7b72=Ta5d6ff"21.795" Te6edf3y1Tff7b72=Ta5d6ff"7.5" Te6edf3x2Tff7b72=Ta5d6ff"23" Te6edf3y2Tff7b72=Ta5d6ff"7.5"Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72line Te6edf3styleTff7b72=Ta5d6ff"opacity: 50%" Te6edf3x1Tff7b72=Ta5d6ff"15.316" Te6edf3y1Tff7b72=Ta5d6ff"10.184" Te6edf3x2Tff7b72=Ta5d6ff"14.464" Te6edf3y2Tff7b72=Ta5d6ff"11.036"Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72line Te6edf3styleTff7b72=Ta5d6ff"opacity: 50%" Te6edf3x1Tff7b72=Ta5d6ff"20.711" Te6edf3y1Tff7b72=Ta5d6ff"4.789" Te6edf3x2Tff7b72=Ta5d6ff"21.563" Te6edf3y2Tff7b72=Ta5d6ff"3.937"Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72circle Te6edf3styleTff7b72=Ta5d6ff"opacity: 50%" Te6edf3cxTff7b72=Ta5d6ff"18" Te6edf3cyTff7b72=Ta5d6ff"7.5" Te6edf3rTff7b72=Ta5d6ff"2.169"Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72svgTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72symbolTb4b4b4>
Tb4b4b4<Tff7b72symbol Te6edf3idTff7b72=Ta5d6ff"svg-pencil" Te6edf3viewBoxTff7b72=Ta5d6ff"0 0 24 24"Tb4b4b4>
Tb4b4b4<Tff7b72svg Te6edf3xmlnsTff7b72=Ta5d6ff"http://www.w3.org/2000/svg" Te6edf3viewBoxTff7b72=Ta5d6ff"0 0 24 24" Te6edf3fillTff7b72=Ta5d6ff"none" Te6edf3strokeTff7b72=Ta5d6ff"currentColor"
Te6edf3stroke-widthTff7b72=Ta5d6ff"1" Te6edf3stroke-linecapTff7b72=Ta5d6ff"round" Te6edf3stroke-linejoinTff7b72=Ta5d6ff"round" Te6edf3classTff7b72=Ta5d6ff"icon-tabler-pencil-code"Tb4b4b4>
Tb4b4b4<Tff7b72path Te6edf3dTff7b72=Ta5d6ff"M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72path Te6edf3dTff7b72=Ta5d6ff"M13.5 6.5l4 4" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72path Te6edf3dTff7b72=Ta5d6ff"M20 21l2 -2l-2 -2" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72path Te6edf3dTff7b72=Ta5d6ff"M17 17l-2 2l2 2" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72svgTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72symbolTb4b4b4>
Tb4b4b4<Tff7b72symbol Te6edf3idTff7b72=Ta5d6ff"svg-eye" Te6edf3viewBoxTff7b72=Ta5d6ff"0 0 24 24"Tb4b4b4>
Tb4b4b4<Tff7b72svg Te6edf3xmlnsTff7b72=Ta5d6ff"http://www.w3.org/2000/svg" Te6edf3viewBoxTff7b72=Ta5d6ff"0 0 24 24" Te6edf3fillTff7b72=Ta5d6ff"none" Te6edf3strokeTff7b72=Ta5d6ff"currentColor"
Te6edf3stroke-widthTff7b72=Ta5d6ff"1" Te6edf3stroke-linecapTff7b72=Ta5d6ff"round" Te6edf3stroke-linejoinTff7b72=Ta5d6ff"round" Te6edf3classTff7b72=Ta5d6ff"icon-tabler-eye-code"Tb4b4b4>
Tb4b4b4<Tff7b72path Te6edf3strokeTff7b72=Ta5d6ff"none" Te6edf3dTff7b72=Ta5d6ff"M0 0h24v24H0z" Te6edf3fillTff7b72=Ta5d6ff"none" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72path Te6edf3dTff7b72=Ta5d6ff"M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72path
Te6edf3dTff7b72=Ta5d6ff"M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72path Te6edf3dTff7b72=Ta5d6ff"M20 21l2 -2l-2 -2" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72path Te6edf3dTff7b72=Ta5d6ff"M17 17l-2 2l2 2" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72svgTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72symbolTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72svgTb4b4b4>
Tb4b4b4<Tff7b72input Te6edf3typeTff7b72=Ta5d6ff"checkbox" Te6edf3classTff7b72=Ta5d6ff"sidebar-toggle" Te6edf3nameTff7b72=Ta5d6ff"__navigation" Te6edf3idTff7b72=Ta5d6ff"__navigation" Te6edf3aria-labelTff7b72=Ta5d6ff"Toggle site navigation sidebar"Tb4b4b4>
Tb4b4b4<Tff7b72input Te6edf3typeTff7b72=Ta5d6ff"checkbox" Te6edf3classTff7b72=Ta5d6ff"sidebar-toggle" Te6edf3nameTff7b72=Ta5d6ff"__toc" Te6edf3idTff7b72=Ta5d6ff"__toc" Te6edf3aria-labelTff7b72=Ta5d6ff"Toggle table of contents sidebar"Tb4b4b4>
Tb4b4b4<Tff7b72label Te6edf3classTff7b72=Ta5d6ff"overlay sidebar-overlay" Te6edf3forTff7b72=Ta5d6ff"__navigation"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72labelTb4b4b4>
Tb4b4b4<Tff7b72label Te6edf3classTff7b72=Ta5d6ff"overlay toc-overlay" Te6edf3forTff7b72=Ta5d6ff"__toc"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72labelTb4b4b4>
Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"skip-to-content muted-link" Te6edf3hrefTff7b72=Ta5d6ff"#furo-main-content"Tb4b4b4>Skip to contentTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"page"Tb4b4b4>
Tb4b4b4<Tff7b72header Te6edf3classTff7b72=Ta5d6ff"mobile-header"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"header-left"Tb4b4b4>
Tb4b4b4<Tff7b72label Te6edf3classTff7b72=Ta5d6ff"nav-overlay-icon" Te6edf3forTff7b72=Ta5d6ff"__navigation"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"icon"Tb4b4b4>Tb4b4b4<Tff7b72svgTb4b4b4>Tb4b4b4<Tff7b72use Te6edf3hrefTff7b72=Ta5d6ff"#svg-menu"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72useTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72svgTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72labelTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"header-center"Tb4b4b4>
Tb4b4b4<Tff7b72a Te6edf3hrefTff7b72=Ta5d6ff"index.html"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"brand"Tb4b4b4>Reticulum Network Stack 1.3.6 documentationTb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"header-right"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"theme-toggle-container theme-toggle-header"Tb4b4b4>
Tb4b4b4<Tff7b72button Te6edf3classTff7b72=Ta5d6ff"theme-toggle" Te6edf3aria-labelTff7b72=Ta5d6ff"Toggle Light / Dark / Auto color theme"Tb4b4b4>
Tb4b4b4<Tff7b72svg Te6edf3classTff7b72=Ta5d6ff"theme-icon-when-auto-light"Tb4b4b4>Tb4b4b4<Tff7b72use Te6edf3hrefTff7b72=Ta5d6ff"#svg-sun-with-moon"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72useTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72svgTb4b4b4>
Tb4b4b4<Tff7b72svg Te6edf3classTff7b72=Ta5d6ff"theme-icon-when-auto-dark"Tb4b4b4>Tb4b4b4<Tff7b72use Te6edf3hrefTff7b72=Ta5d6ff"#svg-moon-with-sun"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72useTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72svgTb4b4b4>
Tb4b4b4<Tff7b72svg Te6edf3classTff7b72=Ta5d6ff"theme-icon-when-dark"Tb4b4b4>Tb4b4b4<Tff7b72use Te6edf3hrefTff7b72=Ta5d6ff"#svg-moon"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72useTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72svgTb4b4b4>
Tb4b4b4<Tff7b72svg Te6edf3classTff7b72=Ta5d6ff"theme-icon-when-light"Tb4b4b4>Tb4b4b4<Tff7b72use Te6edf3hrefTff7b72=Ta5d6ff"#svg-sun"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72useTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72svgTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72label Te6edf3classTff7b72=Ta5d6ff"toc-overlay-icon toc-header-icon" Te6edf3forTff7b72=Ta5d6ff"__toc"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"icon"Tb4b4b4>Tb4b4b4<Tff7b72svgTb4b4b4>Tb4b4b4<Tff7b72use Te6edf3hrefTff7b72=Ta5d6ff"#svg-toc"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72useTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72svgTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72labelTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72headerTb4b4b4>
Tb4b4b4<Tff7b72aside Te6edf3classTff7b72=Ta5d6ff"sidebar-drawer"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"sidebar-container"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"sidebar-sticky"Tb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"sidebar-brand" Te6edf3hrefTff7b72=Ta5d6ff"index.html"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"sidebar-logo-container"Tb4b4b4>
Tb4b4b4<Tff7b72img Te6edf3classTff7b72=Ta5d6ff"sidebar-logo" Te6edf3srcTff7b72=Ta5d6ff"_static/rns_logo_512.png" Te6edf3altTff7b72=Ta5d6ff"Logo"Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"sidebar-brand-text"Tb4b4b4>Reticulum Network Stack 1.3.6 documentationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tff7b72form Te6edf3classTff7b72=Ta5d6ff"sidebar-search-container" Te6edf3methodTff7b72=Ta5d6ff"get" Te6edf3actionTff7b72=Ta5d6ff"search.html" Te6edf3roleTff7b72=Ta5d6ff"search"Tb4b4b4>
Tb4b4b4<Tff7b72input Te6edf3classTff7b72=Ta5d6ff"sidebar-search" Te6edf3placeholderTff7b72=Ta5d6ff"Search" Te6edf3nameTff7b72=Ta5d6ff"q" Te6edf3aria-labelTff7b72=Ta5d6ff"Search"Tb4b4b4>
Tb4b4b4<Tff7b72input Te6edf3typeTff7b72=Ta5d6ff"hidden" Te6edf3nameTff7b72=Ta5d6ff"check_keywords" Te6edf3valueTff7b72=Ta5d6ff"yes"Tb4b4b4>
Tb4b4b4<Tff7b72input Te6edf3typeTff7b72=Ta5d6ff"hidden" Te6edf3nameTff7b72=Ta5d6ff"area" Te6edf3valueTff7b72=Ta5d6ff"default"Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72formTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3idTff7b72=Ta5d6ff"searchbox"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"sidebar-scroll"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"sidebar-tree"Tb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"current"Tb4b4b4>
Tb4b4b4<Tff7b72li Te6edf3classTff7b72=Ta5d6ff"toctree-l1"Tb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"whatis.html"Tb4b4b4>What is Reticulum?Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72li Te6edf3classTff7b72=Ta5d6ff"toctree-l1"Tb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"gettingstartedfast.html"Tb4b4b4>Getting Started FastTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72li Te6edf3classTff7b72=Ta5d6ff"toctree-l1"Tb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"zen.html"Tb4b4b4>Zen of ReticulumTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72li Te6edf3classTff7b72=Ta5d6ff"toctree-l1"Tb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"software.html"Tb4b4b4>Programs Using ReticulumTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72li Te6edf3classTff7b72=Ta5d6ff"toctree-l1"Tb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"using.html"Tb4b4b4>Using Reticulum on Your SystemTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72li Te6edf3classTff7b72=Ta5d6ff"toctree-l1"Tb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"understanding.html"Tb4b4b4>Understanding ReticulumTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72li Te6edf3classTff7b72=Ta5d6ff"toctree-l1"Tb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"hardware.html"Tb4b4b4>Communications HardwareTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72li Te6edf3classTff7b72=Ta5d6ff"toctree-l1"Tb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"interfaces.html"Tb4b4b4>Configuring InterfacesTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72li Te6edf3classTff7b72=Ta5d6ff"toctree-l1"Tb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"networks.html"Tb4b4b4>Building NetworksTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72li Te6edf3classTff7b72=Ta5d6ff"toctree-l1"Tb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"distributed.html"Tb4b4b4>Distributed DevelopmentTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72li Te6edf3classTff7b72=Ta5d6ff"toctree-l1 current current-page"Tb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"current reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#"Tb4b4b4>Git Over ReticulumTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72li Te6edf3classTff7b72=Ta5d6ff"toctree-l1"Tb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"support.html"Tb4b4b4>Support ReticulumTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72li Te6edf3classTff7b72=Ta5d6ff"toctree-l1"Tb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"examples.html"Tb4b4b4>Code ExamplesTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72li Te6edf3classTff7b72=Ta5d6ff"toctree-l1"Tb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"license.html"Tb4b4b4>Reticulum LicenseTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72li Te6edf3classTff7b72=Ta5d6ff"toctree-l1"Tb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"reference.html"Tb4b4b4>API ReferenceTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72asideTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"main"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"content"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"article-container"Tb4b4b4>
Tb4b4b4<Tff7b72a Te6edf3hrefTff7b72=Ta5d6ff"#" Te6edf3classTff7b72=Ta5d6ff"back-to-top muted-link"Tb4b4b4>
Tb4b4b4<Tff7b72svg Te6edf3xmlnsTff7b72=Ta5d6ff"http://www.w3.org/2000/svg" Te6edf3viewBoxTff7b72=Ta5d6ff"0 0 24 24"Tb4b4b4>
Tb4b4b4<Tff7b72path Te6edf3dTff7b72=Ta5d6ff"M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pathTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72svgTb4b4b4>
Tb4b4b4<Tff7b72spanTb4b4b4>Back to topTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"content-icon-container"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"theme-toggle-container theme-toggle-content"Tb4b4b4>
Tb4b4b4<Tff7b72button Te6edf3classTff7b72=Ta5d6ff"theme-toggle" Te6edf3aria-labelTff7b72=Ta5d6ff"Toggle Light / Dark / Auto color theme"Tb4b4b4>
Tb4b4b4<Tff7b72svg Te6edf3classTff7b72=Ta5d6ff"theme-icon-when-auto-light"Tb4b4b4>Tb4b4b4<Tff7b72use Te6edf3hrefTff7b72=Ta5d6ff"#svg-sun-with-moon"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72useTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72svgTb4b4b4>
Tb4b4b4<Tff7b72svg Te6edf3classTff7b72=Ta5d6ff"theme-icon-when-auto-dark"Tb4b4b4>Tb4b4b4<Tff7b72use Te6edf3hrefTff7b72=Ta5d6ff"#svg-moon-with-sun"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72useTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72svgTb4b4b4>
Tb4b4b4<Tff7b72svg Te6edf3classTff7b72=Ta5d6ff"theme-icon-when-dark"Tb4b4b4>Tb4b4b4<Tff7b72use Te6edf3hrefTff7b72=Ta5d6ff"#svg-moon"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72useTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72svgTb4b4b4>
Tb4b4b4<Tff7b72svg Te6edf3classTff7b72=Ta5d6ff"theme-icon-when-light"Tb4b4b4>Tb4b4b4<Tff7b72use Te6edf3hrefTff7b72=Ta5d6ff"#svg-sun"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72useTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72svgTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72label Te6edf3classTff7b72=Ta5d6ff"toc-overlay-icon toc-content-icon" Te6edf3forTff7b72=Ta5d6ff"__toc"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"icon"Tb4b4b4>Tb4b4b4<Tff7b72svgTb4b4b4>Tb4b4b4<Tff7b72use Te6edf3hrefTff7b72=Ta5d6ff"#svg-toc"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72useTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72svgTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72labelTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72article Te6edf3roleTff7b72=Ta5d6ff"main" Te6edf3idTff7b72=Ta5d6ff"furo-main-content"Tb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"git-over-reticulum"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3idTff7b72=Ta5d6ff"git-main"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72h1Tb4b4b4>Git Over ReticulumTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#git-over-reticulum" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h1Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>This chapter of the manual serves as the technical reference for the distributed software development and project collaboration tools included in RNS. For a conceptual overview, see the Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"distributed.html#distributed-development"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"std std-ref"Tb4b4b4>Distributed DevelopmentTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4> chapter.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>A set of utilities for distributed collaborative software development and publishing are included in RNS.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The system consists of two parts: The Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> node that hosts repositories, and the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>git-remote-rnsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> helper that enables Git to communicate with rngit nodes. As soon as you have RNS installed on your system, you can transparently use Git with Reticulum-hosted repositories just like any other type of remote. Git over Reticulum uses URLs in the following format: Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rns://DESTINATION_HASH/group/repoTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>If you set a branch to track a Reticulum remote as the default upstream, you can simply use Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>gitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> as you normally would; all commands work transparently and as expected.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"admonition important"Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"admonition-title"Tb4b4b4>ImportantTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>The rngit program is a new addition to RNS!Tb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4> This functionality was introduced in RNS 1.2.0. While great care has been taken to design a secure, but highly configurable and flexible Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference external" Te6edf3hrefTff7b72=Ta5d6ff"#permissions"Tb4b4b4>permission systemTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4> for allowing many users to interact with many different repositories on a single node, Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> has not been tested extensively in the wild! Be careful when hosting repositories, especially if they are public or semi-public.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"the-rngit-utility"Tb4b4b4>
Tb4b4b4<Tff7b72h2Tb4b4b4>The rngit UtilityTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#the-rngit-utility" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h2Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> utility provides full Git repository hosting and interaction over Reticulum. It allows you to host and manage Git repositories and releases on Reticulum nodes, and to interact with remote repositories using standard Git commands through the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rns://Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> URL scheme.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Usage ExamplesTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Run Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> to start a repository node:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit
[Notice] Starting Reticulum Git Node...
[Notice] Reticulum Git Node listening on Te6edf3<0d7334d411d00120cbad24edf355fdd2Te6edf3>
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>On the first run, Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> will create a default configuration file. You will then need to edit this, to point to your repository locations, configure access permissions, and perform any other necessary configuration.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Them, view your identity and destination hashes:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit --print-identity
Git Peer Identity : Te6edf3<959e10e5efc1bd9d97a4083babe51deaTe6edf3>
Repository Node Identity : Te6edf3<153cb870b4665b8c1c348896292b0badTe6edf3>
Repositories Destination : Te6edf3<0d7334d411d00120cbad24edf355fdd2Te6edf3>
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>If the page node is enabled, the output will also include the Nomad Network destination hash.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>You can run Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> in service mode with logging to file:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit -s
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Clone a repository from a remote Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> node:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ git clone rns://50824b711717f97c2fb1166ceddd5ea9/public/myrepo
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Add a Reticulum remote to an existing repository:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ git remote add some_remote rns://50824b711717f97c2fb1166ceddd5ea9/public/myrepo
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Push changes to the Reticulum remote:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ git push some_remote master
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Get changes from a remote repository:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ git pull rns_remote master
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Fork an existing repository from a remote to your Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> node:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit fork rns://8a37cdd16938ce79861561adbd59023a/reticulum/lxmf rns://50824b711717f97c2fb1166ceddd5ea9/public/myfork
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>All Command-Line Options (rngit)Tb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>usage: rngit.py [-h] [--config CONFIG] [--rnsconfig RNSCONFIG] [-s] [-i] [-v]
[-q] [--version]
Reticulum Git Repository Node
options:
-h, --help show this help message and exit
--config CONFIG path to alternative config directory
--rnsconfig RNSCONFIG
path to alternative Reticulum config directory
-p, --print-identity print identity and destination info and exit
-s, --service rngit is running as a service and should log to file
-i, --interactive drop into interactive shell after initialisation
-v, --verbose increase verbosity
-q, --quiet decrease verbosity
--version show programTe6edf3's version number and exit
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>All Command-Line Options (git-remote-rns)Tb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>git-remote-rnsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> helper is automatically invoked by Git when interacting with Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rns://Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> URLs. It is not typically run directly by users, but accepts the following environment variables for configuration:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>RNGIT_CONFIGTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - Path to alternative client configuration directoryTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>RNS_CONFIGTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - Path to alternative Reticulum configuration directoryTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The client configuration file is located at Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>~/.rngit/client_configTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> and allows adjusting parameters such as the reference batch size for transfers.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"repository-creation-management"Tb4b4b4>
Tb4b4b4<Tff7b72h2Tb4b4b4>Repository Creation Te6edf3& ManagementTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#repository-creation-management" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h2Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> utility provides several ways to create and manage repositories on a node: creating empty repositories, forking from existing repositories, and mirroring remote repositories.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"creating-empty-repositories"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Creating Empty RepositoriesTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#creating-empty-repositories" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>To create a new empty repository on a remote node:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit create rns://50824b711717f97c2fb1166ceddd5ea9/public/myrepo
Repository public/myrepo created
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>This creates a bare Git repository at the specified path. You must have Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>createTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> permission for the target group. When a repository is created, the creator automatically receives Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>admTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> (admin) permissions on the repository through an auto-generated Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>.allowedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> file.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>All Command-Line Options (rngit create)Tb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>usage: rngit create [-h] [--config CONFIG] [--rnsconfig RNSCONFIG]
[-i PATH] [-v] [-q] [--version]
repository
Reticulum Git Repository Creation
positional arguments:
repository URL of repository to create
options:
-h, --help show this help message and exit
--config CONFIG path to alternative config directory
--rnsconfig RNSCONFIG
path to alternative Reticulum config directory
-i, --identity PATH path to identity
-v, --verbose
-q, --quiet
--version show programTe6edf3's version number and exit
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"forking-repositories"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Forking RepositoriesTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#forking-repositories" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Forking creates a copy of an existing repository (from any accessible Git URL) on your Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> node. Forks maintain a reference to their upstream source for later synchronization.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>To fork a repository:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit fork https://github.com/user/original rns://50824b711717f97c2fb1166ceddd5ea9/public/myfork
Repository forked to public/myfork
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The source can be any valid Git URL, including:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>HTTPS URLs: Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>https://github.com/user/repo.gitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>SSH URLs: Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>ssh://gitTe6edf3@host.com/repo.gitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Reticulum URLs: Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rns://DESTINATION_HASH/group/repoTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Forks are created as bare repositories with metadata tracking their origin. The fork process:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72ol Te6edf3classTff7b72=Ta5d6ff"arabic simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Creates a new bare repositoryTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Fetches all refs (Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>+refs/*:refs/*Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>) from the sourceTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Sets Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>repository.rngit.typeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> to Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>forkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Sets Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>repository.rngit.upstream.sourceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> to the source URLTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Grants creator admin permissionsTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72olTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>All Command-Line Options (rngit fork)Tb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>usage: rngit fork [-h] [--config CONFIG] [--rnsconfig RNSCONFIG]
[-i PATH] [-v] [-q] [--version]
source target
Reticulum Git Repository Forker
positional arguments:
source URL of source repository
target URL of target repository
options:
-h, --help show this help message and exit
--config CONFIG path to alternative config directory
--rnsconfig RNSCONFIG
path to alternative Reticulum config directory
-i, --identity PATH path to identity
-v, --verbose
-q, --quiet
--version show programTe6edf3's version number and exit
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"mirroring-repositories"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Mirroring RepositoriesTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#mirroring-repositories" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Mirrors are similar to forks but are designed for keeping a local copy synchronized with an upstream repository. Mirrors can be automatically updated on a configurable schedule.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>To create a mirror:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit mirror https://github.com/user/upstream rns://50824b711717f97c2fb1166ceddd5ea9/public/mymirror
Repository mirrored to public/mymirror
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Mirrors are created with the same process as forks, but with Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>repository.rngit.typeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> set to Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>mirrorTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> and an additional Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>repository.rngit.upstream.syncTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> timestamp tracking the last successful synchronization.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>All Command-Line Options (rngit mirror)Tb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>usage: rngit mirror [-h] [--config CONFIG] [--rnsconfig RNSCONFIG]
[-i PATH] [-v] [-q] [--version]
source target
Reticulum Git Mirror Management
positional arguments:
source URL of source repository
target URL of target repository
options:
-h, --help show this help message and exit
--config CONFIG path to alternative config directory
--rnsconfig RNSCONFIG
path to alternative Reticulum config directory
-i, --identity PATH path to identity
-v, --verbose
-q, --quiet
--version show programTe6edf3's version number and exit
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"automatic-mirror-synchronization"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Automatic Mirror SynchronizationTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#automatic-mirror-synchronization" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> node can automatically keep mirrors synchronized with their upstream sources. This is configured in the main configuration file:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>[rngit]
mirror_interval = 24
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>mirror_intervalTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> specifies the synchronization interval in hours (default: 24). The node checks for mirrors needing sync every 15 minutes, and fetches updates from upstream if the configured interval has elapsed since the last sync.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>For automatic sync to happen, the repository must have been created with Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>mirrorTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>. Sync failures are logged but do not prevent future retry attempts. The sync timestamp is only updated on successful completion.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"manual-synchronization"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Manual SynchronizationTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#manual-synchronization" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Both forks and mirrors can be manually synchronized on demand using the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>syncTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> command:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit sync rns://50824b711717f97c2fb1166ceddd5ea9/public/myfork
Repository synced
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>This fetches all refs from the upstream source configured when the repository was created. You must have Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>readTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> and Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>writeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> permissions for the repository to perform a manual sync.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>For mirrors, manual sync also updates the sync timestamp, effectively resetting the automatic sync timer.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>All Command-Line Options (rngit sync)Tb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>usage: rngit sync [-h] [--config CONFIG] [--rnsconfig RNSCONFIG]
[-i PATH] [-v] [-q] [--version]
repository
Reticulum Git Repository Syncer
positional arguments:
repository URL of repository
options:
-h, --help show this help message and exit
--config CONFIG path to alternative config directory
--rnsconfig RNSCONFIG
path to alternative Reticulum config directory
-i, --identity PATH path to identity
-v, --verbose
-q, --quiet
--version show programTe6edf3's version number and exit
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"git-configuration-parameters"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Git Configuration ParametersTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#git-configuration-parameters" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Repositories created through Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> store metadata in Git configuration:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>repository.rngit.typeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - Either Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>forkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> or Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>mirrorTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>repository.rngit.upstream.sourceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - The source URL used during creationTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>repository.rngit.upstream.syncTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - Unix timestamp of last successful sync for mirrorsTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>These parameters are used by the sync system and can be queried using standard Git commands:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ git config --get repository.rngit.type
mirror
$ git config --get repository.rngit.upstream.source
https://github.com/user/upstream
$ git config --get repository.rngit.upstream.sync
1716230400
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"repository-structure"Tb4b4b4>
Tb4b4b4<Tff7b72h2Tb4b4b4>Repository StructureTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#repository-structure" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h2Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> node organizes repositories into groups. Each group is a directory containing bare Git repositories. The repository path format is Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>group_name/repo_nameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>. For example, a repository at Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>/var/git/public/myrepoTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> would be accessible as Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>public/myrepoTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> via the URL Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rns://DESTINATION_HASH/public/myrepoTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"configuration"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>ConfigurationTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#configuration" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> node configuration file is located at Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>~/.rngit/configTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> (or Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>/etc/rngit/configTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> for system-wide installations). The default configuration includes:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Repository group paths defining where to find bare repositoriesTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Access permissions for groups and individual repositoriesTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Announce intervals for network visibilityTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Optional statistics recording for repository activityTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"permissions"Tb4b4b4>
Tb4b4b4<Tff7b72h2Tb4b4b4>PermissionsTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#permissions" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h2Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> permission system provides fine-grained access control at multiple levels: group-level, repository-level, and document-level. Permissions can be statically configured in files or dynamically generated via executable scripts.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Access permissions can be configured at the group level in the config file or per-group Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>.allowedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> files, or per-repository Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>.allowedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> files. The Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>sTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> (stats) permission allows viewing repository activity statistics, including views, fetches and pushes over time. To enable statistics recording, set Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>record_statsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>yesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> in the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>[rngit]Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> section of the configuration file. You can also exclude specific identities from statistics by adding their hashes to Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>stats_ignore_identitiesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>By default, Tb4b4b4<Tff7b72strongTb4b4b4>noTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4> permissions are granted for anything! You will have to enable the permissions you require to be able to actually Tb4b4b4<Tff7b72emTb4b4b4>doTb4b4b4<Tb4b4b4/Tff7b72emTb4b4b4> something with Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Permissions can be modified by editing the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> config file, individual Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>.allowedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> files on disk, or remotely using the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>permsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> command.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"permission-types"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Permission TypesTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#permission-types" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The following permissions are supported:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> (read) - Clone, fetch, and view repositories and work documentsTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>wTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> (write) - Push changes and manage work documentsTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rwTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> (read/write) - Combined read and write accessTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>cTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> (create) - Create, fork or mirror new repositories within a groupTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>sTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> (stats) - View repository activity statisticsTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>relTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> (release) - Create and manage releasesTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>iTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> (interact) - Comment on and interact with work documentsTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>pTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> (propose) - Propose new work documents (without full write access)Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>admTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> (admin) - Full accessTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Permission targets can be:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>allTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> or Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>aTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - EveryoneTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>noneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> or Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>nTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - NobodyTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>A specific Reticulum identity hashTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"permission-hierarchy"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Permission HierarchyTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#permission-hierarchy" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Permissions are resolved in the following hierarchy:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72ol Te6edf3classTff7b72=Ta5d6ff"arabic simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Repository-level permissionsTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4> - Checked first, if none exists group permissions are checkedTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Group-level permissionsTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4> - Used as fallback if no repository-level permissions are setTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Admin overrideTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4> - Finally, potential admin rights are checkedTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72olTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>For work documents, work document specific permissions are always checked first, and work documents have additional specific checks such as modifications only being possible by the document author.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"configuration-methods"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Configuration MethodsTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#configuration-methods" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Group-Level ConfigurationTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Group permissions can be configured in the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>[access]Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> section of the main config file:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>[access]
public = r:all, w:9710b86ba12c42d1d8f30f74fe509286
internal = rw:9710b86ba12c42d1d8f30f74fe509286
collaborative = r:all, i:all, p:all, w:9710b86ba12c42d1d8f30f74fe509286
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Additionally, they can be configured in a group Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>group_name.allowedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> file, placed next to the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>group_nameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> group directory.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Repository-Level ConfigurationTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Repository-specific permissions are set in Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>.allowedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> files placed next to the repository directory (for example, Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>myrepo.allowedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> for Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>myrepoTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4># myrepo.allowed
r:all
w:9710b86ba12c42d1d8f30f74fe509286
rel:9710b86ba12c42d1d8f30f74fe509286
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Dynamic PermissionsTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Permission files can be made executable to generate permissions dynamically:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ chmod +x myrepo.allowed
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>When executable, the script is run and its stdout is parsed as permission rules. This allows integration with external authentication systems.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"work-document-permissions"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Work Document PermissionsTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#work-document-permissions" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Work documents support additional permission granularity through Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>.allowedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> files in the work directory (e.g., Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>42.allowedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> for document #42). These files use the same permission syntax but only support:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> (read) - View the documentTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>wTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> (write) - Edit the documentTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>iTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> (interact) - Comment on the documentTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>pTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> (propose) - Propose changes (future use)Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>admTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> (admin) - Full control over the documentTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Document permissions override repository permissions for that specific document. Work document permissions can be updated simply by editing the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>.allowedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> file, or remotely by using the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>workTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> command.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"creator-permissions"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Creator PermissionsTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#creator-permissions" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>When a user creates a repository (via Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>createTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>, Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>forkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>, or Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>mirrorTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>), they are automatically granted Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>admTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> (admin) permissions on that repository.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>When a user creates a work document, they automatically receive Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>interactTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> and Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>writeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> permissions on that document.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"permission-examples"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Permission ExamplesTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#permission-examples" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Example 1: Public Read, Restricted WriteTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>r:all
w:9710b86ba12c42d1d8f30f74fe509286
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Everyone can read, only the specified identity can write.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Example 2: Collaborative DevelopmentTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>r:all
i:all
p:all
w:9710b86ba12c42d1d8f30f74fe509286
rel:9710b86ba12c42d1d8f30f74fe509286
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Everyone can read, interact (comment), and propose work documents. Only the specified identity can write, create releases, and manage work documents fully.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Example 3: Private RepositoryTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>rw:9710b86ba12c42d1d8f30f74fe509286
rw:a1b2c3d4e5f686ba12c42d1ba12ef1aa
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Only the two specified identities have any access (read or write).Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Example 4: Mirror with StatsTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>r:all
s:all
w:none
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Everyone can read and view stats, but nobody can push (mirror is read-only from upstream).Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"permission-short-forms"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Permission Short FormsTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#permission-short-forms" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Permissions can be specified using short or long forms:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> = Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>readTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>wTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> = Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>writeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rwTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> = Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>readwriteTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>cTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> = Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>createTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>sTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> = Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>statsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>relTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> = Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>releaseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>iTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> = Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>interactTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>pTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> = Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>proposeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>admTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> = Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>adminTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Targets can also use short forms:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>aTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> = Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>allTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> = Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>everyoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>nTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> = Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>noneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> = Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>nobodyTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"permission-configuration-locations"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Permission Configuration LocationsTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#permission-configuration-locations" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>User install: Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>~/.rngit/configTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>System install: Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>/etc/rngit/configTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Group permissions: Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>Te6edf3<group_rootTe6edf3>/Te6edf3<group_nameTe6edf3>.allowedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Repository permissions: Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>Te6edf3<group_rootTe6edf3>/Te6edf3<group_nameTe6edf3>/Te6edf3<repo_nameTe6edf3>.allowedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Document permissions: Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>Te6edf3<group_rootTe6edf3>/Te6edf3<group_nameTe6edf3>.work/Te6edf3<doc_idTe6edf3>.allowedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"remote-permission-management"Tb4b4b4>
Tb4b4b4<Tff7b72h2Tb4b4b4>Remote Permission ManagementTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#remote-permission-management" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h2Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>While permissions can be configured directly on the node by editing configuration files and Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>.allowedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> files, Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> also supports remote permission management through the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>permsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> command. This allows administrators to modify access controls for groups and repositories over Reticulum, without requiring shell access to the hosting node.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>To use remote permission management, you must have Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>adminTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> permission on the target group or repository. The command opens your configured Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>$EDITORTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> to modify permissions, using the same syntax and format as local Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>.allowedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> files. When you save and exit the editor, the modified permissions are transmitted to the remote node and applied immediately.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"managing-group-permissions"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Managing Group PermissionsTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#managing-group-permissions" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>To view or modify permissions for an entire repository group, specify the group URL (ending with the group name):Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit perms rns://50824b711717f97c2fb1166ceddd5ea9/public
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>This retrieves the current permission configuration from the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>public.allowedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> file and opens it in your editor. Any changes you make are validated for syntax correctness. Invalid permission rules will be rejected with an error message indicating the problematic line.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"managing-repository-permissions"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Managing Repository PermissionsTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#managing-repository-permissions" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>To manage permissions for a specific repository, include the repository name in the URL:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit perms rns://50824b711717f97c2fb1166ceddd5ea9/public/myrepo
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>This operates on the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>myrepo.allowedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> file next to the repository. Repository-level permissions take precedence over group-level permissions, allowing fine-grained access control for individual repositories within a group.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"permission-validation"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Permission ValidationTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#permission-validation" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>When modifying permissions remotely, Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> validates that:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Each permission line follows the correct Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>permission:targetTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> syntaxTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Permission types are valid (r, w, rw, c, s, rel, i, p, adm)Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Target specifications are valid (identity hashes, Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>allTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>, or Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>noneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Identity hashes, when specified, are the correct length (32 hexadecimal characters)Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>If validation fails, the editor will reopen with an error message describing the issue, allowing you to correct the problem before resubmitting.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"admonition caution"Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"admonition-title"Tb4b4b4>CautionTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Remote permission modification requires administrative access (the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>admTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> permission), which grants full control over the repository or group. The permission change request is transmitted over the encrypted Reticulum link, and the remote node verifies your identity cryptographically before applying changes. However, be aware that granting Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>admTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> permissions to remote identities effectively delegates full control, including the ability to revoke your own access or modify permissions in ways you may not anticipate.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>All Command-Line Options (rngit perms)Tb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>usage: rngit perms [-h] [--config CONFIG] [--rnsconfig RNSCONFIG]
[-i PATH] [-v] [-q] [--version]
remote
Reticulum Git Permission Manager
positional arguments:
remote URL of remote group or repository
options:
-h, --help show this help message and exit
--config CONFIG path to alternative config directory
--rnsconfig RNSCONFIG
path to alternative Reticulum config directory
-i, --identity PATH path to identity
-v, --verbose
-q, --quiet
--version show programTe6edf3's version number and exit
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"identity-destination-aliases"Tb4b4b4>
Tb4b4b4<Tff7b72h2Tb4b4b4>Identity Te6edf3& Destination AliasesTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#identity-destination-aliases" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h2Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>To make permission and remote destination management easier, you can locally define aliases for commonly used identity and destination hashes. Identity aliases used in permissions resolution can be defined in the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>[aliases]Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> section of the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>~/.rngit/configTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> file, while destination aliases are defined in the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>[aliases]Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> section of the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>~/.rngit/client_configTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> file.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>All alias definitions take the form of Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>aliased_nameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>HASHTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>[aliases]
alice = d09285e660cfe27cee6d9a0beb58b7e0
bob = ffcffb4e255e156e77f79b82c13086a6
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Aliases are always resolved locally!Tb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4> If for example you fork a repository with Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>forkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rns://bobs_node/public/repo_nameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rns://my_node/forks/repo_nameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>, the forked repository will of course still reference the full, original destination hash, and use this for subsequent upstream syncs.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"serving-pages-over-nomad-network"Tb4b4b4>
Tb4b4b4<Tff7b72h2Tb4b4b4>Serving Pages Over Nomad NetworkTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#serving-pages-over-nomad-network" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h2Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>In addition to providing Git repository access via the Git remote helper protocol and command-line tools, Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> can also run a Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference external" Te6edf3hrefTff7b72=Ta5d6ff"https://github.com/markqvist/nomadnet"Tb4b4b4>Nomad NetworkTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4> compatible page node. This allows users to browse repository information, view file contents, inspect commit history and access repository statistics through any Nomad Network client.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>When enabled, the page node provides a complete interface to your repositories, with automatic Markdown to Micron conversion, syntax-highlighted code browsing, and detailed commit, diff and statistics views.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"enabling-the-git-page-node"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Enabling the Git Page NodeTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#enabling-the-git-page-node" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>To enable the page node, add the following to your Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>~/.rngit/configTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> file:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>[pages]
serve_nomadnet = yes
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>When the page node is enabled, Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> will listen on a Nomad Network node destination in addition to the Git repository destination. You can view the destination hash by running:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit --print-identity
Git Peer Identity : Te6edf3<959e10e5efc1bd9d97a4083babe51deaTe6edf3>
Repository Node Identity : Te6edf3<153cb870b4665b8c1c348896292b0badTe6edf3>
Repositories Destination : Te6edf3<0d7334d411d00120cbad24edf355fdd2Te6edf3>
Nomad Network Destination : Te6edf3<50824b711717f97c2fb1166ceddd5ea9Te6edf3>
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"accessing-repository-pages"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Accessing Repository PagesTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#accessing-repository-pages" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Once the page node is running, you can access it from any Nomad Network client by connecting to the Nomad Network destination. The page node provides the following views:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Front PageTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4> - Lists all repository groups accessible to your identityTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Group PageTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4> - Shows all repositories within a groupTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Repository PageTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4> - Displays repository overview, description and READMETb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>ReleasesTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4> - List of releases for the repository, with information and downloadsTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>File BrowserTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4> - Browse directory trees and view and download file contentsTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Commits ViewTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4> - View commit history with paginationTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Commit DetailsTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4> - Detailed commit information with file changes and diffsTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Refs ViewTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4> - List branches and tagsTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>StatisticsTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4> - Activity charts showing views, fetches and pushes over timeTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>All pages respect the same permission system used for Git access. If an identity does not have read access to a repository, they will not be able to view its pages.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"formatting-syntax-highlighting"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Formatting Te6edf3& Syntax HighlightingTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#formatting-syntax-highlighting" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>If the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>pygmentsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> Python module is installed on your system, the page node will automatically apply syntax highlighting to code files. The highlighting supports a wide range of programming languages and uses a color theme optimized for terminal display.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>To enable syntax highlighting, install pygments:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>pip install pygments
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Markdown Te6edf3& Micron SupportTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>README files and other Markdown documents are automatically converted to Micron markup for display in Nomad Network clients. You can also write your README files directly in Micron, in which case they will display and render as such in any Nomad Network client. The file browser also supports viewing both rendered and raw Markdown and Micron documents.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Code blocks in Markdown can include language hints for syntax highlighting:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>```python
def hello_world():
print(Te6edf3"Hello, Reticulum!Te6edf3")
```
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>You can use Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rawmuTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> code blocks to render raw Micron inside Markdown files. If you create a code block with the language hint Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rawmuTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>, everything inside it will be treated as Micron directly.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"customizing-templates"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Customizing TemplatesTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#customizing-templates" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The page node uses a template system that allows complete customization of the generated pages. Templates are stored in the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>~/.rngit/templates/Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> directory as Micron files.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The following template files are supported:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>base.muTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - Base template wrapping all pagesTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>front.muTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - Front page listing all groupsTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>group.muTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - Group page listing repositoriesTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>repo.muTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - Repository overview pageTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>releases.muTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - Release list pageTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>release.muTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - Release details pageTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>tree.muTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - File browser pagesTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>blob.muTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - File content displayTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>commits.muTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - Commit history listingTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>commit.muTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - Individual commit detail pageTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>refs.muTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - Branches and tags listingTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>stats.muTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - Statistics pageTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Templates can include the following variables:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>{PAGE_CONTENT}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - The main content of the page (required)Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>{NODE_NAME}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - The configured node nameTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>{NAVIGATION}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - Breadcrumb navigation linksTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>{VERSION}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - The rngit version numberTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>{GEN_TIME}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - Page generation timeTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Dynamic TemplatesTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Templates can be made executable to generate dynamic content. If a template file has the executable bit set, it will be executed and its stdout used as the template content.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Icon SetsTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>By default, the page node uses Nerd Font icons. If you prefer simpler icons or your terminal does not support Nerd Fonts, you can enable Unicode icons instead:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>[pages]
serve_nomadnet = yes
unicode_icons = yes
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"repository-statistics"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Repository StatisticsTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#repository-statistics" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>When statistics recording is enabled (see the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>record_statsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> configuration option), the page node can display activity charts for each repository. The statistics page shows:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Total and peak views, downloads, fetches and pushesTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Daily activity charts over a 90-day periodTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Combined activity visualizationTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>To view statistics, a user must have the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>sTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> (stats) permission for the repository. See the Access Configuration section for details on setting permissions.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Repository ThanksTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The page node includes a “Thanks” feature that allows users to express appreciation for a repository. On each repository page, a “Thanks” link is displayed showing the current thanks count. Clicking this link registers a thank you for the repository.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"configuration-example"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Configuration ExampleTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#configuration-example" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>A complete node configuration might look like this:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>[rngit]
node_name = My Git Node
announce_interval = 360
record_stats = yes
[repositories]
public = /var/git/public
internal = /var/git/internal
[access]
public = r:all
internal = rw:9710b86ba12c42d1d8f30f74fe509286
[pages]
serve_nomadnet = yes
unicode_icons = no
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"verified-releases"Tb4b4b4>
Tb4b4b4<Tff7b72h2Tb4b4b4>Verified ReleasesTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#verified-releases" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h2Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> release system provides cryptographic provenance and integrity guarantees through automatic signing of release artifacts and signed release manifests. When you create a release, Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> generates an Ed25519 signature for each artifact and embeds these signatures in a cryptographically signed release manifest (Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>.rsmTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> file). This allows anyone who obtains the release to verify its authenticity and integrity, regardless of how the files were distributed.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"obtaining-verified-releases"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3idTff7b72=Ta5d6ff"git-release-obtain"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72h3Tb4b4b4>Obtaining Verified ReleasesTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#obtaining-verified-releases" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> system lets you obtain releases securely and in a verified manner, by validating cryptographically signed release manifests in the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>.rsmTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> format during the retrieval process. Once a release has been published with Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>, anyone that has read access to it can obtain the release with the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>releaseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> command, for example:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit release rns://remote_node/group/some_program fetch latest:all
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>This command will connect to the remote, retrieve the latest release manifest, verify it’s signature and integrity (you can optionally specify a required signer identity with Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>--signerTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>), and then download and sequentially verify all artifacts included in the release.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>If verification succeeds, the retrieved artifact files, along with the release manifest will be saved in the current working directory. From the above example, you would end up with a number of downloaded files, and a version- and package specific release manifest, such as Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>some_program_1.5.2.rsmTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"admonition important"Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"admonition-title"Tb4b4b4>ImportantTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Keeping the retrieved release manifest is a Tb4b4b4<Tff7b72strongTb4b4b4>veryTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4> good idea! It allows you to easily obtain future releases and updates to the software directly, while verifying they came from the same publisher.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Obtaining Te6edf3& Updating Releases Using RSM ManifestsTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>One of the key features of the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> release system is the ability to fetch and verify new releases using only a signed release manifest. This is particularly valuable for distributing software over Reticulum. Once someone has an Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>.rsmTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> manifest of your package, they can use it to continually retrieve and update the software.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>To fetch a release using a manifest:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit release some_program_1.5.2.rsm fetch latest:all
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>This command:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72ol Te6edf3classTff7b72=Ta5d6ff"arabic simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Validates the manifest signature to confirm authenticityTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Extracts the origin node and repository path from the signed manifestTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Connects to the origin node over ReticulumTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Gets the Tb4b4b4<Tff7b72emTb4b4b4>latestTb4b4b4<Tb4b4b4/Tff7b72emTb4b4b4> release manifest from the developerTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Verifies it against the existing manifestTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Fetches each artifact listed in the manifestTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Verifies each downloaded file against the signature embedded in the manifestTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72olTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>If any artifact fails signature verification, the fetch aborts with an error, preventing the installation of corrupted or tampered files.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Specifying Required SignersTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>You can require that releases be signed by specific identities. When fetching a release, use the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>--signerTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> option to specify the identity hash of the required signer:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit release rns://remote_node/public/myrepo fetch latest:all --signer 21a8daa6d9c3d3b8aab6e94b6bcb0e33
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>If the release was not signed by the specified identity, the fetch will abort before any files are downloaded. Likewise, if any downloaded artifacts were not signed by the required identity, the process will abort at the first invalid signature. This provides strong guarantees about the provenance of the software you are installing.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The signer check also works when fetching from a local manifest:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit release manifest.rsm fetch latest:all --signer 21a8daa6d9c3d3b8aab6e94b6bcb0e33
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Selective Te6edf3& Partial FetchesTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>You can fetch individual artifacts from a release by specifying the artifact name instead of Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>allTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit release rns://remote_node/public/myrepo fetch 1.2.0:myapp-1.2.0.tar.gz
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>This downloads only the specified artifact and verifies its signature against the manifest. If a file already exists locally, Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> verifies it against the manifest signature and skips the download if valid, making it safe to run the command multiple times. When fetching releases, Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>releaseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> will only download files that are missing or invalid according to the manifest. This means that partially completed release fetches can be continued later, if interrupted.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Pattern Matching for ArtifactsTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>When fetching selective artifacts, you are not limited to exact names or the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>allTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> keyword. You can use shell-style wildcard patterns to match multiple artifacts flexibly. This is particularly useful for selecting platform-specific builds, version ranges, or file types without specifying each file individually.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"admonition tip"Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"admonition-title"Tb4b4b4>TipTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>When using pattern matching, make sure to enclose the target specification in quotes. Otherwise,
your shell will probably interpret it as a shell expansion pattern Tb4b4b4<Tff7b72emTb4b4b4>beforeTb4b4b4<Tb4b4b4/Tff7b72emTb4b4b4> it is passed as an
argument to Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>!Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The pattern matching supports standard Unix wildcards:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>*Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> matches any sequence of characters (including empty)Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>?Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> matches any single characterTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>[seq]Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> matches any character in Tb4b4b4<Tff7b72emTb4b4b4>seqTb4b4b4<Tb4b4b4/Tff7b72emTb4b4b4> (for example Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>[0-9]Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> or Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>[abc]Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>[!seq]Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> matches any character not in Tb4b4b4<Tff7b72emTb4b4b4>seqTb4b4b4<Tb4b4b4/Tff7b72emTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>For example, to fetch all wheel files for Python 3 across any platform:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit release rns://remote_node/public/myrepo fetch Te6edf3"1.2.0:*-py3-*.whlTe6edf3"
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>To fetch a specific patch version when you know the major and minor version:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit release rns://remote_node/public/myrepo fetch Te6edf3"1.2.0:myapp-1.2.?-linux-x86_64.tar.gzTe6edf3"
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Or to retrieve all source archives:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit release rns://remote_node/public/myrepo fetch Te6edf3"1.2.0:source_*.tgzTe6edf3"
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>If your pattern contains no wildcard characters, it must match an artifact name exactly, which is useful for fetching single, specific artifacts. When a pattern matches multiple artifacts, all matched files are fetched and verified. If no artifacts match the pattern, the fetch aborts with an error indicating no matches were found.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"offline-verification"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Offline VerificationTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#offline-verification" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Because the release manifest contains embedded signatures, you can verify the integrity of release artifacts offline, without connecting to the repository node. The Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rnidTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> and Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> utilities can validate artifact signatures against Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>.rsgTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> and manifest files.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Using a release manifest:Tb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Ensure the release manifest is located in the same directory as the release artifacts, then run:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4># Verify all artifacts in the manifest
$ rngit release myapp-1.2.0.rsm verify
$ rngit release myapp-1.2.0.rsm verify Te6edf3"latest:*.whlTe6edf3"
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>This will load the manifest, and verify all files currently on-disk, but will not attempt to fetch the latest release manifest from the origin, or update local files to match it.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"admonition note"Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"admonition-title"Tb4b4b4>NoteTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>verifyTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> operation is functionally equivalent to using the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>fetchTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> operation with the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>--offlineTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> flag, and they can be used interchangably.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>For individual files:Tb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Ensure the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>.rsgTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> signature is located in the same directory as the release artifact, then run:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rnid -V myapp-1.2.0.tar.gz
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>This validates that the artifact file matches the signature created during the release process. Combined with the manifest’s own signature, this provides end-to-end verification from the original release creation to the final installation.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"creating-signed-releases"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3idTff7b72=Ta5d6ff"git-release-create"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72h3Tb4b4b4>Creating Signed ReleasesTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#creating-signed-releases" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Reticulum and the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> system makes it easy to create signed releases that your users can verify and update securely. When you create a release using Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>, the program automatically:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72ol Te6edf3classTff7b72=Ta5d6ff"arabic simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Generates an Ed25519 signature for each artifact file using your identity’s signing keyTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Creates Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>.rsgTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> signature files alongside each artifact in your distribution directoryTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Constructs a signed Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>manifest.rsmTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> release manifest containing metadata, an artifact list, and embedded signaturesTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Transmits both artifacts, signatures and manifest to the remote node specified as release originTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72olTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>As an example, to create and publish a release from all files in the folder named Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>distTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>, simply run:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit release rns://my_node/group/myrepo create 1.2.0:./dist
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Everything is automatically signed and uploaded to your node, and the release manifest will now include the following signed attestation information:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Package name and versionTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>The release notes for this releaseTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Release timestamp and commit hashTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Origin node identity and repository pathTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Complete list of artifactsTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Embedded signatures for each artifactTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>That’s it, there’s nothing more to it than one command. Users can now securely obtain your release using Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>releaseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>fetchTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Release Manifest FormatTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Release manifests use the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>.rsmTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> format (a general-purpose, structured signed message format) and are themselves cryptographically signed documents. The manifest format embeds the signing identity’s public key and a detached signature that covers the entire manifest content. This creates a chain of trust: the manifest signature proves the manifest’s authenticity, and the embedded artifact signatures prove each file’s integrity.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>When a release is created, the manifest is stored as Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>manifest.rsmTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> in the release artifacts directory. You can also generate a local release manifest without uploading by using the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>--localTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> flag:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit release rns://f2d31b2e080e5d4e358d32822ee4a3b7/public/myrepo create 1.2.0:./dist --local
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>This creates the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>.rsgTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> signature files and Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>manifest.rsmTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> in your local distribution directory without connecting to the remote node, allowing you to inspect or distribute the signed release through alternative channels.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Signature File FormatTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Individual artifact signatures use the Reticulum Signature (Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>.rsgTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>) format and contain:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>The Ed25519 signature of the fileTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>The signing identity’s public keyTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Optional metadata, such as timestamps or notesTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>These signature files are created automatically during the release process and can be used independently of the manifest for verification purposes. The Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rnidTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> utility can create and validate RSG signatures for any file, making this signature format useful beyond the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> release system.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Good Practices for Signature DistributionTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>While release manifests in the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>.rsmTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> format Tb4b4b4<Tff7b72emTb4b4b4>includeTb4b4b4<Tb4b4b4/Tff7b72emTb4b4b4> embedded Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>.rsgTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> signatures for every listed artifact, it is dependent on the situation and requirements whether individual Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>.rsgTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> signatures are distributed as well. It is generally a good idea to do so, since they are very light-weight, and provide an easy and convenient way to validate and authenticate Tb4b4b4<Tff7b72emTb4b4b4>individualTb4b4b4<Tb4b4b4/Tff7b72emTb4b4b4> files, as opposed to entire releases.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>When distributing software through multiple channels (direct download, mirror networks, physical media), including the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>.rsmTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> manifest allows recipients to verify authenticity regardless of how they obtained the files. This is particularly valuable in low-connectivity environments where Reticulum may be the only available communication channel, as the manifest ensures that software updates can be verified even when received via store-and-forward mechanisms or physical media transport.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Integration with Package ManagementTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>While this functionality is still under development, the signed release manifest format is designed to be consumed by package management systems and automated deployment tools. Because the manifest is cryptographically signed and contains all necessary metadata and integrity checks, it can serve as a trusted source of truth for software distribution, even when fetched over untrusted channels or stored for long periods.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Release EncryptionTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>While API primitives and command-line tools are currently not implemented for this, the release, distribution and verification system has been designed to also support Tb4b4b4<Tff7b72emTb4b4b4>encryptedTb4b4b4<Tb4b4b4/Tff7b72emTb4b4b4> releases, which can be distributed securely to authorized recipients.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Verified Package FormatTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The current system is being expanded to also include an Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>.rvpTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> package format, which can contain packaged releases including all relevant artifacts, metadata, manifest and signatures.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Automated Mirror DiscoveryTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> release system is designed to support automated mirror discovery and distribution package retrieval over Reticulum networks. Since everything is cryptographically signed and verified, it is possible to create automated mirror and distribution networks, where users can obtain software and information from local sources, without risking malicious modifications to the software they rely on. This functionality is currently in development.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"release-management"Tb4b4b4>
Tb4b4b4<Tff7b72h2Tb4b4b4>Release ManagementTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#release-management" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h2Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>In addition to hosting Git repositories, Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> provides a complete release management system. This allows you to publish versioned releases with associated artifacts, release notes and metadata. Releases are managed through the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>releaseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> subcommand, and are also viewable through the Nomad Network page interface.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"the-release-workflow"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>The Release WorkflowTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#the-release-workflow" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Creating a release involves specifying a Git tag and a directory containing build artifacts or other files to distribute. The Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> client will open your configured Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>$EDITORTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> to compose release notes, then upload all artifacts to the remote repository node.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>To create a release, specify the tag name and path to artifacts:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit release rns://50824b711717f97c2fb1166ceddd5ea9/public/myrepo create 1.2.0:./dist
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>This will:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72ol Te6edf3classTff7b72=Ta5d6ff"arabic simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Verify that the tag Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>1.2.0Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> exists in the repositoryTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Open your editor to write release notesTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Upload all files from the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>./distTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> directoryTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Publish the releaseTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72olTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>If no Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>$EDITORTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> environment variable is set, Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> will try to use Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>nanoTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>, Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>vimTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> or Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>viTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>. The editor will show a template with instructions. Lines starting with Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>#Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> will be ignored, and if the remaining content is empty after stripping comments, the release creation will be cancelled.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"release-storage-structure"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Release Storage Te6edf3& StructureTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#release-storage-structure" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Releases are stored on the node in a directory named Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>repo_name.releasesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> next to the bare repository. Each release is a subdirectory containing:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>METATb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - Release metadata in ConfigObj formatTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>RELEASE.mdTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> or Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>RELEASE.muTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - Release notesTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>artifacts/Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - All uploaded filesTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>THANKSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - Appreciation count from usersTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"command-line-interaction"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Command-Line InteractionTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#command-line-interaction" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Listing ReleasesTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>To view all releases for a repository:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit release rns://50824b711717f97c2fb1166ceddd5ea9/public/myrepo list
Tag Status Created Objs Notes
------------------------------------------------------------------
1.2.0 published 2025-01-15 14:32 3 Another release
1.1.0 published 2024-12-03 09:15 2 Bug fix release
1.0.0 published 2024-10-20 16:45 2 Initial release
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Viewing Release DetailsTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>To see full information about a specific release:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit release rns://50824b711717f97c2fb1166ceddd5ea9/public/myrepo view 1.2.0
Release : 1.2.0
Status : published
Created : 2026-05-04 23:53:09
Thanks : 5
Release Notes
=============
Version 1.2.0 release notes...
Artifacts (4)
=============
- myapp-1.2.0.tar.gz (1.5 MB)
- myapp-1.2.0.zip (1.6 MB)
- checksums.txt (256 B)
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Fetching ReleasesTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>To fetch a release, specify the remote URL, version and artifacts:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit release rns://50824b711717f97c2fb1166ceddd5ea9/public/myrepo fetch latest:all
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>This process is described in greater detail in the Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#git-release-obtain"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"std std-ref"Tb4b4b4>Obtaining Verified ReleasesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4> section.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Creating ReleasesTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>To fetch a release, specify the remote URL, version and artifacts:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit release rns://50824b711717f97c2fb1166ceddd5ea9/public/myrepo create 1.3.9:artifacts_dir
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>This process is described in greater detail in the Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#git-release-create"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"std std-ref"Tb4b4b4>Creating Signed ReleasesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4> section.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Deleting ReleasesTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>To remove a release:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit release rns://50824b711717f97c2fb1166ceddd5ea9/public/myrepo delete 1.2.0
Are you sure you want to delete release Te6edf3'1.2.0Te6edf3'? [y/N]: y
Release 1.2.0 deleted
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Requirements Te6edf3& ValidationTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>The specified tag must exist in the remote repositoryTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>You must have Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>releaseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> permission for the repositoryTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>The target artifacts directory must exist and contain at least one fileTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Release notes cannot be emptyTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>PermissionsTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Release management requires the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>releaseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> permission, configured the same way as other repository permissions. In the config file or Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>.allowedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> files, use Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rel:targetTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> to grant release management rights:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4># In .allowed file or config
rel:all # Allow everyone
rel:9710b86... # Allow specific identity
rel:none # Deny everyone
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Nomad Network InterfaceTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>When the Nomad Network page node is enabled, releases are displayed on a dedicated releases page for each repository. Each release is listed with its tag, creation date, artifact count and a preview of the release notes. Clicking a release shows the full details including formatted release notes and a listing of all artifacts with their sizes.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>All Command-Line Options (rngit release)Tb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>usage: python -m RNS.Utilities.rngit.server [-h] [--config CONFIG] [--rnsconfig RNSCONFIG]
[-i PATH] [-s PATH] [-n name] [-L]
[-o] [-v] [-q] [--version]
[repository] [operation] [target]
Reticulum Git Release Manager
positional arguments:
repository URL of remote repository, or path to RSM manifest
operation list, view, fetch, create, latest or delete
target tag and path to release artifacts directory
options:
-h, --help show this help message and exit
--config CONFIG path to alternative config directory
--rnsconfig RNSCONFIG
path to alternative Reticulum config directory
-i, --identity PATH path to release identity
-s, --signer PATH path to signing identity, if different from release identity
-n, --name name package name if different from repo name
-L, --local generate release locally, but donTe6edf3't upload
-o, --offline verify manifest locally, but donTe6edf3't fetch updates
-v, --verbose
-q, --quiet
--version show programTe6edf3's version number and exit
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"work-documents"Tb4b4b4>
Tb4b4b4<Tff7b72h2Tb4b4b4>Work DocumentsTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#work-documents" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h2Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>In addition to releases, Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> provides a work document management system for tracking tasks, investigations, issues and progress related to repositories. Work documents are stored as structured msgpack data and support threaded updates and comments.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"working-with-work-documents"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Working With Work DocumentsTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#working-with-work-documents" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Listing Work DocumentsTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>To view work documents for a repository:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit work rns://50824b711717f97c2fb1166ceddd5ea9/public/myrepo list
Active documents
=================
ID Title Author Created Comments
---------------------------------------------------------------------------
1 Implemented new feature 9710b86ba12c4f2e… 2025-01-15 14:32 3
2 Fixed bug in parser 8f3a21c9d84e927b… 2025-01-14 09:15 1
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Use Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>--scopeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>completedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> to view completed work documents, Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>--scopeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>proposedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> to view proposed documents, or Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>--scopeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>allTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> to see all scopes.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Viewing a Work DocumentTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>To view a specific work document with all its comments:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit work rns://50824b711717f97c2fb1166ceddd5ea9/public/myrepo view -d 1
Implement new feature (active #1)
=================================
Author : 9710b86ba12c42d1d8f30f74fe509286
Status : active
Created : 2026-05-05 15:11:11
Edited : 2026-05-05 18:22:11
Format : markdown
Updates : 0
This work document tracks the implementation of the new feature...
Updates
=======
-------------------------------------------------------------
Initial analysis complete
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Creating Work DocumentsTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>To create a new work document:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit work rns://50824b711717f97c2fb1166ceddd5ea9/public/myrepo create --title Te6edf3"Investigate performance issueTe6edf3"
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>This will open your configured Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>$EDITORTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> to compose the document content. Save and exit to create the document, or save an empty document to cancel.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Editing Work DocumentsTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>To edit an existing work document:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit work rns://50824b711717f97c2fb1166ceddd5ea9/public/myrepo edit -d 1
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>This fetches the current content, opens it in your editor, and sends any changes back to the node.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Adding CommentsTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>To add an update to a work document:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit work rns://50824b711717f97c2fb1166ceddd5ea9/public/myrepo update -d 1
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>This opens your editor to compose the update.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"proposing-work-documents"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Proposing Work DocumentsTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#proposing-work-documents" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Users with Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>proposeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> permission can create work document proposals without full Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>writeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> access. Proposals are created in a “proposed” state and must be activated by a user with appropriate permissions before becoming active.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>To propose a work document:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit work rns://50824b711717f97c2fb1166ceddd5ea9/public/myrepo propose --title Te6edf3"Feature proposalTe6edf3"
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>This opens your editor to compose the proposal content. When saved, the document is created in the “proposed” scope. The creator automatically receives Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>interactTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> and Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>writeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> permissions on the proposed document.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Proposed documents are visible through Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>--scopeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>proposedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> or Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>--scopeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>allTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit work rns://50824b711717f97c2fb1166ceddd5ea9/public/myrepo list --scope proposed
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Permissions for ProposalsTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Creating proposals requires Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>proposeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> permission on the repositoryTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>The creator automatically gets Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>interactTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> and Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>writeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> on their proposed documentTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Activating a proposal requires Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>writeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> and Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>interactTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> permissionsTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"state-management"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>State ManagementTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#state-management" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Completing Work DocumentsTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>To mark a work document as completed (moving it from Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>activeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> to Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>completedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit work rns://50824b711717f97c2fb1166ceddd5ea9/public/myrepo complete -d 1
Work document #1 completed
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Activating Work DocumentsTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>To mark a work document as active (moving it from Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>completedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> to Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>activeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit work rns://50824b711717f97c2fb1166ceddd5ea9/public/myrepo activate -d 1
Work document #1 activated
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Deleting Work DocumentsTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>To delete a work document and all its comments:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit work rns://50824b711717f97c2fb1166ceddd5ea9/public/myrepo delete -id 1
Are you sure you want to delete active work document #1? [y/N]: y
Work document #1 deleted
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"managing-work-document-permissions"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Managing Work Document PermissionsTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#managing-work-document-permissions" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Users with administrative access to a work document can manage its specific permissions. This allows fine-grained control over who can read, write, comment on, or administer individual work documents.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>To view or edit permissions for a work document:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rngit work rns://50824b711717f97c2fb1166ceddd5ea9/public/myrepo perms -d 1
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>This opens your editor with the current permission configuration:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>r:all
i:9710b86ba12c42d1d8f30f74fe509286
adm:9710b86ba12c42d1d8f30f74fe509286
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Permission rules follow the same format as repository permissions:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>r:targetTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - Grant read accessTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>w:targetTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - Grant write accessTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>i:targetTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - Grant interact (comment) accessTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>adm:targetTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - Grant admin accessTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Targets can be Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>allTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>, Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>noneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>, or a specific identity hash.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Who Can Edit PermissionsTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Document permissions can be edited by:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>The original author (if they also have Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>interactTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> and Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>writeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> on the repository)Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Any user with Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>adminTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> permission on the documentTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Repository admins (through inherited permissions)Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Permission PrecedenceTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Document-specific permissions override repository-level permissions for that document. If document permissions exist, they are checked first; if access is not granted there, repository permissions are checked.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Author Rights:Tb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Users can only edit or delete work documents they createdTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>The author is cryptographically verified from the interacting link’s Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>remote_identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Document creators automatically receive Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>interactTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> and Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>writeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> on their documentsTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Storage FormatTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Work documents are stored in a Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>repo_name.workTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> directory next to the repository, containing:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>active/Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - Active work documentsTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>completed/Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - Completed work documentsTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>proposed/Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - Proposed work documentsTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Each document is a numbered directory containing:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rootTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - The work document content and metadata (msgpack format)Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>NTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> - Numbered comment files (msgpack format)Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Nomad Network InterfaceTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>When the Nomad Network page node is enabled, work documents are viewable through the nomadnet interface. The work page lists all documents with their status, and clicking a document shows its full content and updates.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"cryptographic-attribution"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Cryptographic AttributionTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#cryptographic-attribution" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Every work document is cryptographically signed by its creator using their Reticulum identity. When you create or edit a document, Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> generates an Ed25519 signature of the content, which is stored alongside the document contents and verified by the remote node, or locally when viewing the work document through the command-line interface. This provides two essential guarantees:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Attribution:Tb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4> Every document and comment can be cryptographically attributed to its actual authorTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Integrity:Tb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4> Any modification to the content after creation would invalidate the signatureTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>When viewing a work document, the signature validation status is displayed:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Author : 9710b86ba12c42d1d8f30f74fe509286 (not locally validated)
Signature : Document not signed
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Or, for valid signatures:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Author : Te6edf3<9710b86ba12c42d1d8f30f74fe509286Te6edf3>
Signature : Valid
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The “Valid” status indicates that the document content matches the author’s signature, and that the signing identity corresponds to the stated author. This can be used to create tamper-proof records of project decisions, investigations, and discussions that cannot be repudiated, or modified by third parties without detection.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>This cryptographic provenance is particularly valuable for distributed teams operating across trust boundaries. Because signatures are verified using the author’s Reticulum identity public keys - which can be recalled from any transport node on the network - work documents provide authoritative records of who said what, and when, without requiring a central authority to notarize or validate the communication. Even if the repository node hosting the documents becomes unavailable, the signed document files themselves retain validity and can be verified independently using standard Reticulum identity tools.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>All Command-Line Options (rngit work)Tb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>usage: rngit work [-h] [--config CONFIG] [--rnsconfig RNSCONFIG]
[-i PATH] [--scope SCOPE] [-t TITLE] [-d ID] [-v]
[-q] [--version]
[repository] [operation]
Reticulum Git Work Document Manager
positional arguments:
repository URL of remote repository
operation list, view, create, propose, edit, delete,
update, complete, activate or perms
options:
-h, --help show this help message and exit
--config CONFIG path to alternative config directory
--rnsconfig RNSCONFIG
path to alternative Reticulum config directory
-i, --identity PATH path to identity
--scope SCOPE document scope: active, completed, proposed or all
-t, --title TITLE document title for create/propose
-d, --id ID document ID
-v, --verbose
-q, --quiet
--version show programTe6edf3's version number and exit
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"commit-signing"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3idTff7b72=Ta5d6ff"git-commit-signing"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72h2Tb4b4b4>Commit SigningTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#commit-signing" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h2Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> system includes Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngcsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>, a Git commit signing and validation shim that enables commit signing and validation using Reticulum identities. By hooking into Git’s SSH-based signing format, commits can be signed and verified using Reticulum identity keys directly.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Unlike traditional GPG and SSH-based commit signing, which relies on centralized keyservers, cumbersome co-signing procedures or manual per-signer setup, Reticulum commit signing uses self-contained RSG signatures, that can be deterministically resolved to Reticulum identity hashes.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>This enables offline verification with no external infrastructure. The signature itself contains everything needed to cryptographically verify the signer’s Reticulum identity and that the commit was signed correctly by the claimed identity.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"prerequisites"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>PrerequisitesTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#prerequisites" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Before you can sign commits, you need a Reticulum identity with a private key. If you don’t already have one, you can generate it using Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rnidTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ rnid -g ~/.rngit/client_identity
New identity Te6edf3<1a54d64db7e8beca6f2c6cd17b0cb479Te6edf3> written to /home/user/.rngit/client_identity
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The identity file must contain the private key to be usable for signing. The corresponding Reticulum identity hash will be used as the commit author identity.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"id1"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>ConfigurationTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#id1" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Git must be configured to use SSH-format signatures with the Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngcsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> signing shim, which is included in RNS. You can configure this either globally or per-repository.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Global ConfigurationTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Enabling Reticulum commit signing for all repositories is as simple as:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ git config --global gpg.format ssh
$ git config --global gpg.ssh.program rngcs
$ git config --global gpg.ssh.allowedsignersfile none
$ git config --global user.signingKey ~/.rngit/client_identity
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>With this configuration, all commits you sign with Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>gitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>commitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>-STb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> will use your Reticulum identity.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"admonition note"Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"admonition-title"Tb4b4b4>NoteTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>gpg.ssh.allowedsignersfileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> configuration key Tb4b4b4<Tff7b72strongTb4b4b4>mustTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4> be Tb4b4b4<Tff7b72emTb4b4b4>setTb4b4b4<Tb4b4b4/Tff7b72emTb4b4b4> for Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>gitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> to allow invoking the signing and verification shim. It is not actually used by Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngcsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>, and can be set to an arbitrary value. All validation operations happen exclusively based on the information in the embedded RSG data.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Tb4b4b4<Tff7b72strongTb4b4b4>Per-Repository ConfigurationTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>To enable signing only for a specific repository:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ cd /path/to/repository
$ git config --local gpg.format ssh
$ git config --local gpg.ssh.program rngcs
$ git config --local gpg.ssh.allowedsignersfile none
$ git config --local user.signingKey ~/.rngit/client_identity
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>This is useful when you want to use different identities for different projects, or when only specific repositories require signed commits.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"author-identity-binding"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Author Identity BindingTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#author-identity-binding" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>For the signature to be valid, the Git author email Tb4b4b4<Tff7b72strongTb4b4b4>mustTb4b4b4<Tb4b4b4/Tff7b72strongTb4b4b4> match the Reticulum identity hash of the signing key. You can configure this using a command like the following:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ git config --global user.email Te6edf3"1a54d64db7e8beca6f2c6cd17b0cb479Te6edf3"
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>When Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngcsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> verifies a commit, it extracts both the Git author field of the signed commit message and the signer identity from the RSG signature, ensuring they match. This binding is necessary to prevent identity spoofing. If someone crafts a commit with your identity hash in the author field but signs with a different key, verification will fail.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"signing-commits"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Signing CommitsTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#signing-commits" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Once configured, sign commits using the standard Git Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>-STb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> flag:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ git commit -S -m Te6edf3"Refactored moduleTe6edf3"
[master 8f7e6d5] Refactored module
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>This will create a self-contained RSG-formatted signature, encode the RSG payload using base64, and wrap it in an ASCII-armored SSH-formatted signature block. The signature is then stored in the commit object’s signature header and includes:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"simple"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>The SHA256 hash of the commit contentTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>The signer’s Reticulum identity hashTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>The signer’s public keyTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72pTb4b4b4>The actual signature of the complete envelopeTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tff7b72section Te6edf3idTff7b72=Ta5d6ff"validating-commit-signatures"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Validating Commit SignaturesTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#validating-commit-signatures" Te6edf3titleTff7b72=Ta5d6ff"Link to this heading"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>Commits are automatically validated when using Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>gitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>--show-signatureTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> or Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>gitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>showTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>--show-signatureTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4>. The Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>rngcsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> shim handles all verification operations. If any step fails, verification fails and Git displays an error.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>To view signature information for commits, use Git’s standard Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>--show-signatureTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> option:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-text notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>$ git log --show-signature
commit 8f7e6d5c8f7e6d5c8f7e6d5c8f7e6d5c8f7e6d5
Good Te6edf3"gitTe6edf3" signature for commit, signed with Reticulum Identity key Te6edf3<1a54d64db7e8beca6f2c6cd17b0cb479Te6edf3>
Author: Developer Te6edf3<1a54d64db7e8beca6f2c6cd17b0cb479Te6edf3>
Date: Mon Jan 15 09:30:00 2026 +0100
Refactored module
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The output shows whether the commit signature is valid, and whether the author field matches the signing identity.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"admonition tip"Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"admonition-title"Tb4b4b4>TipTb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>If you want to display both the identity hash and LXMF address for authors, you can generate a Tb4b4b4<Tff7b72code Te6edf3classTff7b72=Ta5d6ff"docutils literal notranslate"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"pre"Tb4b4b4>.mailmapTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72codeTb4b4b4> file that resolves identities to LXMF addresses with the following script:Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-#!/bin/bash notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>DIR=Te6edf3"$( cd Te6edf3"$( dirname Te6edf3"${BASH_SOURCE[0]}Te6edf3" )Te6edf3" Te6edf3>/dev/null 2Te6edf3>Te6edf3&1 Te6edf3&Te6edf3& pwd )Te6edf3"
cd $DIR
id_regex=Te6edf3"Te6edf3<([0-9a-f]{32})( .*)*Te6edf3>Te6edf3"
extract_id=Te6edf3"s/.*$id_regex/\1/gTe6edf3"
rm -f .mailmap
git shortlog -se | grep -Ee Te6edf3"$id_regexTe6edf3" | sed -r Te6edf3"$extract_idTe6edf3" | while read -r id ; do
if lxmf=$(rnid -i $id -H lxmf.delivery | grep -Ee Te6edf3"destination for this Identity isTe6edf3" | sed -r Te6edf3"$extract_idTe6edf3"); then
echo Te6edf3"Te6edf3<$id lxmf:$lxmfTe6edf3> Te6edf3<$idTe6edf3>Te6edf3" Te6edf3>Te6edf3> .mailmap
fi
done
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72sectionTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72articleTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72footerTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"related-pages"Tb4b4b4>
Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"next-page" Te6edf3hrefTff7b72=Ta5d6ff"support.html"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"page-info"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"context"Tb4b4b4>
Tb4b4b4<Tff7b72spanTb4b4b4>NextTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"title"Tb4b4b4>Support ReticulumTb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72svg Te6edf3classTff7b72=Ta5d6ff"furo-related-icon"Tb4b4b4>Tb4b4b4<Tff7b72use Te6edf3hrefTff7b72=Ta5d6ff"#svg-arrow-right"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72useTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72svgTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>
Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"prev-page" Te6edf3hrefTff7b72=Ta5d6ff"distributed.html"Tb4b4b4>
Tb4b4b4<Tff7b72svg Te6edf3classTff7b72=Ta5d6ff"furo-related-icon"Tb4b4b4>Tb4b4b4<Tff7b72use Te6edf3hrefTff7b72=Ta5d6ff"#svg-arrow-right"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72useTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72svgTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"page-info"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"context"Tb4b4b4>
Tb4b4b4<Tff7b72spanTb4b4b4>PreviousTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"title"Tb4b4b4>Distributed DevelopmentTb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"bottom-of-page"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"left-details"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"copyright"Tb4b4b4>
Copyright Te6edf3© 2025, Mark Qvist
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Generated with Tb4b4b4<Tff7b72a Te6edf3hrefTff7b72=Ta5d6ff"https://www.sphinx-doc.org/"Tb4b4b4>SphinxTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4> and
Tb4b4b4<Tff7b72a Te6edf3hrefTff7b72=Ta5d6ff"https://github.com/pradyunsg/furo"Tb4b4b4>FuroTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"right-details"Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72footerTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72aside Te6edf3classTff7b72=Ta5d6ff"toc-drawer"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"toc-sticky toc-scroll"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"toc-title-container"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"toc-title"Tb4b4b4>
On this page
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"toc-tree-container"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"toc-tree"Tb4b4b4>
Tb4b4b4<Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#"Tb4b4b4>Git Over ReticulumTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#the-rngit-utility"Tb4b4b4>The rngit UtilityTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#repository-creation-management"Tb4b4b4>Repository Creation Te6edf3& ManagementTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#creating-empty-repositories"Tb4b4b4>Creating Empty RepositoriesTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#forking-repositories"Tb4b4b4>Forking RepositoriesTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#mirroring-repositories"Tb4b4b4>Mirroring RepositoriesTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#automatic-mirror-synchronization"Tb4b4b4>Automatic Mirror SynchronizationTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#manual-synchronization"Tb4b4b4>Manual SynchronizationTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#git-configuration-parameters"Tb4b4b4>Git Configuration ParametersTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#repository-structure"Tb4b4b4>Repository StructureTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#configuration"Tb4b4b4>ConfigurationTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#permissions"Tb4b4b4>PermissionsTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#permission-types"Tb4b4b4>Permission TypesTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#permission-hierarchy"Tb4b4b4>Permission HierarchyTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#configuration-methods"Tb4b4b4>Configuration MethodsTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#work-document-permissions"Tb4b4b4>Work Document PermissionsTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#creator-permissions"Tb4b4b4>Creator PermissionsTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#permission-examples"Tb4b4b4>Permission ExamplesTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#permission-short-forms"Tb4b4b4>Permission Short FormsTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#permission-configuration-locations"Tb4b4b4>Permission Configuration LocationsTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#remote-permission-management"Tb4b4b4>Remote Permission ManagementTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#managing-group-permissions"Tb4b4b4>Managing Group PermissionsTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#managing-repository-permissions"Tb4b4b4>Managing Repository PermissionsTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#permission-validation"Tb4b4b4>Permission ValidationTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#identity-destination-aliases"Tb4b4b4>Identity Te6edf3& Destination AliasesTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#serving-pages-over-nomad-network"Tb4b4b4>Serving Pages Over Nomad NetworkTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#enabling-the-git-page-node"Tb4b4b4>Enabling the Git Page NodeTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#accessing-repository-pages"Tb4b4b4>Accessing Repository PagesTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#formatting-syntax-highlighting"Tb4b4b4>Formatting Te6edf3& Syntax HighlightingTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#customizing-templates"Tb4b4b4>Customizing TemplatesTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#repository-statistics"Tb4b4b4>Repository StatisticsTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#configuration-example"Tb4b4b4>Configuration ExampleTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#verified-releases"Tb4b4b4>Verified ReleasesTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#obtaining-verified-releases"Tb4b4b4>Obtaining Verified ReleasesTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#offline-verification"Tb4b4b4>Offline VerificationTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#creating-signed-releases"Tb4b4b4>Creating Signed ReleasesTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#release-management"Tb4b4b4>Release ManagementTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#the-release-workflow"Tb4b4b4>The Release WorkflowTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#release-storage-structure"Tb4b4b4>Release Storage Te6edf3& StructureTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#command-line-interaction"Tb4b4b4>Command-Line InteractionTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#work-documents"Tb4b4b4>Work DocumentsTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#working-with-work-documents"Tb4b4b4>Working With Work DocumentsTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#proposing-work-documents"Tb4b4b4>Proposing Work DocumentsTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#state-management"Tb4b4b4>State ManagementTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#managing-work-document-permissions"Tb4b4b4>Managing Work Document PermissionsTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#cryptographic-attribution"Tb4b4b4>Cryptographic AttributionTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#commit-signing"Tb4b4b4>Commit SigningTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#prerequisites"Tb4b4b4>PrerequisitesTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#id1"Tb4b4b4>ConfigurationTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#author-identity-binding"Tb4b4b4>Author Identity BindingTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#signing-commits"Tb4b4b4>Signing CommitsTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#validating-commit-signatures"Tb4b4b4>Validating Commit SignaturesTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72asideTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>Tb4b4b4<Tff7b72script Te6edf3srcTff7b72=Ta5d6ff"_static/documentation_options.js?v=70d8fd07"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72scriptTb4b4b4>
Tb4b4b4<Tff7b72script Te6edf3srcTff7b72=Ta5d6ff"_static/doctools.js?v=9bcbadda"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72scriptTb4b4b4>
Tb4b4b4<Tff7b72script Te6edf3srcTff7b72=Ta5d6ff"_static/sphinx_highlight.js?v=dc90522c"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72scriptTb4b4b4>
Tb4b4b4<Tff7b72script Te6edf3srcTff7b72=Ta5d6ff"_static/scripts/furo.js?v=46bd48cc"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72scriptTb4b4b4>
Tb4b4b4<Tff7b72script Te6edf3srcTff7b72=Ta5d6ff"_static/clipboard.min.js?v=a7894cd8"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72scriptTb4b4b4>
Tb4b4b4<Tff7b72script Te6edf3srcTff7b72=Ta5d6ff"_static/copybutton.js?v=f281be69"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72scriptTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72bodyTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72htmlTb4b4b4>
Served by rngit 1.4.2 - Generated in 0.1s